事情是,通知服务扩展本身是无用的,除了可以在应用程序被杀死时显示的一件事。因此,通过inapp通知和内容扩展,我可以显示自定义通知,但只有在应用程序未被终止/强制关闭时才会显示该通知。 问题:如果有内容和服务通知扩展,如何管理inapp通知,以及如何强制通知服务扩展来调用/唤醒通知内容扩展。
答案 0 :(得分:0)
似乎我需要清理项目并删除应用程序并再次安装。以下是 FCM 完成此案例的完整步骤,可能有些步骤是多余的,但我不想在它工作时触摸它:
应用程序被终止/关闭:自定义内容视图中会显示通知 应用程序位于后台:通知显示自定义内容视图 应用程序位于前台:通知无声地到达
从服务器端,通知应如下所示
{ “通知”://强制 { “数据”:{}, “body”:“”//似乎也是强制性的,无论如何你可以在服务扩展中更改它 } “content_available”:真实的,//强制 “mutable_content”:真实的,//强制 “要”:“” //强制 }
创建通知服务扩展目标。
在didReceive中的NotificationService中获取可变内容
bestAttemptContent =(request.content.mutableCopy()为?UNMutableNotificationContent)
将您的类别添加到内容
bestAttemptContent.categoryIdentifier =“yourCategory”
致电contentHandler(bestAttemptContent)
后,会显示标准通知。
创建通知内容扩展目标。
notification.request.content.userInfo["gcm.notification.data"]
中。因此在NotificationViewController中用数据填充视图。不要忘记preferredContentSize
。UNUserNotificationCenterDelegate
。在didFinishLaunchingWithOptions
添加
UNUserNotificationCenter.current()。delegate = self UNUserNotificationCenter.current()。requestAuthorization(options:[。badge,.alert,.sound]){(授予,错误)in } application.registerForRemoteNotifications()
在AppDelegate中添加
func application(_ application:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken:数据){ Messaging.messaging()。apnsToken = deviceToken }
在userNotificationCenter中,将检查您的应用是否未运行。我是这样做的:
func userNotificationCenter(_ center:UNUserNotificationCenter,willPresent notification:UNNotification,withCompletionHandler completionHandler:@escaping(UNNotificationPresentationOptions) - > Void){ if self.window?.rootViewController == nil { completionHandler([。badge,.alert,.sound]) } UIApplication.shared.applicationIconBadgeNumber = UIApplication.shared.applicationIconBadgeNumber + 1 }
在此处理无声通知:
func application(_ application:UIApplication,didReceiveRemoteNotification userInfo:[AnyHashable:Any],fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - > Void)
func userNotificationCenter(_ center:UNUserNotificationCenter,didReceive response:UNNotificationResponse,withCompletionHandler completionHandler:@escaping() - > Void)
在这里,您可以使用response.notification.request.content.userInfo["gcm.notification.data"]
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void)
似乎全是:)。啊,扩展程序正在启动IOS 10.请纠正我,如果有什么东西丢失或者有些东西是多余的。