IOS:应用内通知 + 通知服务 + 内容扩展



问题是通知服务扩展本身是无用的,除了在应用程序被杀死时可以显示的一件事。因此,通过应用内通知和内容扩展,我可以显示自定义通知,但该通知仅在应用程序未被杀死/强制关闭时才会显示。 问:在存在内容和服务通知扩展的情况下,如何管理应用内通知,以及如何强制通知服务扩展调用/唤醒通知内容扩展。

似乎我需要清理项目并删除应用程序并重新安装。以下是FCM实现这种情况的完整步骤,也许有些步骤是多余的,但我不想在它工作时触摸它:

应用已终止/关闭:通知随自定义内容视图一起显示 应用在后台:通知与自定义内容视图一起显示 应用位于前台:通知以静默方式到达

  1. 从服务器端看,通知应如下所示

    { "通知"://必填项 { "data":{}, "body":"//似乎也是强制性的,无论如何你可以在服务扩展中更改它 } "content_available":true,//必填项 "mutable_content":true,//必填项 "to":"//必填项 }

  2. 创建通知服务扩展目标。

  3. 在 NSExtension下的 info.plist 中,将 UNNotificationExtensionCategory 添加为 Array,并添加一个具有您想要的任何名称的类别,但在任何地方都使用相同的类别。
  4. 在通知服务扩展目标中,确保所有内容都与主目标(swift 版本、生成版本、部署目标、设备)中的内容相同。
  5. 在功能中添加应用组(应与主目标中的应用组相同)。
  6. 在通知服务中接收获取可变内容

    bestTryContent = (request.content.mutableCopy() as?无法获取通知内容)

  7. 将类别添加到内容

    bestTryContent.categoryIdentifier = "yourCategory">

  8. 调用contentHandler(bestAttemptContent)后,将显示标准通知。

  9. 创建通知内容扩展目标。

  10. 在 NSExtension下的 info.plist 中,将 UNNotificationExtensionCategory 添加为"数组",并添加一个具有已为服务创建的相同名称的类别。
  11. 根据您的设计更改 MainInterface.storyboard 中的设计。
  12. 在通知视图控制器中,自定义数据将以notification.request.content.userInfo["gcm.notification.data"]表示。因此,在通知视图控制器中,用数据填充视图。不要忘记preferredContentSize.
  13. 在功能中添加应用组(应与主目标中的应用组相同)。
  14. 在主目标 AppDelegate 中实现UNUserNotificationCenterDelegate
  15. didFinishLaunchingWithOptions添加

    UNUserNotificationCenter.current().delegate = self UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in } application.registerForRemoteNotifications()

  16. 在应用程序委托中添加

    func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken 设备令牌:数据) { Messaging.messaging().apnsToken = deviceToken }

  17. 在用户通知中心将显示检查您的应用程序是否未运行。我是这样做到的:

    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 }

  18. 在此处处理静默通知:

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

    1. 处理此处通知上的点击:

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)

在这里,您可以使用相同的方式获取自定义数据response.notification.request.content.userInfo["gcm.notification.data"]

  1. 如果您有异步网络调用来加载数据/图像,请不要忘记实现func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void)

似乎这就是:).啊,扩展程序从IOS 10开始工作。如果缺少某些内容或多余的内容,请纠正我。

相关内容

  • 没有找到相关文章

最新更新