问题是通知服务扩展本身是无用的,除了在应用程序被杀死时可以显示的一件事。因此,通过应用内通知和内容扩展,我可以显示自定义通知,但该通知仅在应用程序未被杀死/强制关闭时才会显示。 问:在存在内容和服务通知扩展的情况下,如何管理应用内通知,以及如何强制通知服务扩展调用/唤醒通知内容扩展。
似乎我需要清理项目并删除应用程序并重新安装。以下是FCM实现这种情况的完整步骤,也许有些步骤是多余的,但我不想在它工作时触摸它:
应用已终止/关闭:通知随自定义内容视图一起显示 应用在后台:通知与自定义内容视图一起显示 应用位于前台:通知以静默方式到达
-
从服务器端看,通知应如下所示
{ "通知"://必填项 { "data":{}, "body":"//似乎也是强制性的,无论如何你可以在服务扩展中更改它 } "content_available":true,//必填项 "mutable_content":true,//必填项 "to":"//必填项 }
-
创建通知服务扩展目标。
- 在 NSExtension下的 info.plist 中,将 UNNotificationExtensionCategory 添加为 Array,并添加一个具有您想要的任何名称的类别,但在任何地方都使用相同的类别。
- 在通知服务扩展目标中,确保所有内容都与主目标(swift 版本、生成版本、部署目标、设备)中的内容相同。
- 在功能中添加应用组(应与主目标中的应用组相同)。
-
在通知服务中接收获取可变内容
bestTryContent = (request.content.mutableCopy() as?无法获取通知内容)
-
将类别添加到内容
bestTryContent.categoryIdentifier = "yourCategory">
-
调用
contentHandler(bestAttemptContent)
后,将显示标准通知。 -
创建通知内容扩展目标。
- 在 NSExtension下的 info.plist 中,将 UNNotificationExtensionCategory 添加为"数组",并添加一个具有已为服务创建的相同名称的类别。
- 根据您的设计更改 MainInterface.storyboard 中的设计。
- 在通知视图控制器中,自定义数据将以
notification.request.content.userInfo["gcm.notification.data"]
表示。因此,在通知视图控制器中,用数据填充视图。不要忘记preferredContentSize
. - 在功能中添加应用组(应与主目标中的应用组相同)。
- 在主目标 AppDelegate 中实现
UNUserNotificationCenterDelegate
。 -
在
didFinishLaunchingWithOptions
添加UNUserNotificationCenter.current().delegate = self UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in } application.registerForRemoteNotifications()
-
在应用程序委托中添加
func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken 设备令牌:数据) { Messaging.messaging().apnsToken = deviceToken }
-
在用户通知中心将显示检查您的应用程序是否未运行。我是这样做到的:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 如果自我窗口?。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开始工作。如果缺少某些内容或多余的内容,请纠正我。