IOS:Inapp通知+通知服务+内容扩展

时间:2017-09-27 13:36:45

标签: ios notifications apple-push-notifications

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

1 个答案:

答案 0 :(得分:0)

似乎我需要清理项目并删除应用程序并再次安装。以下是 FCM 完成此案例的完整步骤,可能有些步骤是多余的,但我不想在它工作时触摸它:

应用程序被终止/关闭:自定义内容视图中会显示通知 应用程序位于后台:通知显示自定义内容视图 应用程序位于前台:通知无声地到达

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

    { “通知”://强制 { “数据”:{}, “body”:“”//似乎也是强制性的,无论如何你可以在服务扩展中更改它 } “content_available”:真实的,//强制 “mutable_content”:真实的,//强制 “要”:“” //强制 }

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

  3. 在NSExtension下的info.plist中,将UNNotificationExtensionCategory添加为Array,并添加一个具有所需名称的类别,但在任何地方都使用相同的类别。
  4. 在Notification Service Extension目标中,确保所有内容与主目标(swift版本,构建版本,部署目标,设备)相同。
  5. 在功能中添加应用程序组(应与主目标中的相同)。
  6. 在didReceive中的NotificationService中获取可变内容

    bestAttemptContent =(request.content.mutableCopy()为?UNMutableNotificationContent)

  7. 将您的类别添加到内容

    bestAttemptContent.categoryIdentifier =“yourCategory”

  8. 致电contentHandler(bestAttemptContent)后,会显示标准通知。

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

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

    UNUserNotificationCenter.current()。delegate = self     UNUserNotificationCenter.current()。requestAuthorization(options:[。badge,.alert,.sound]){(授予,错误)in     }     application.registerForRemoteNotifications()

  16. 在AppDelegate中添加

    func application(_ application:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken     deviceToken:数据){     Messaging.messaging()。apnsToken = deviceToken }

  17. 在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 }

  18. 在此处理无声通知:

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

    1. 点击此处的通知:
    2. 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)
      2. 似乎全是:)。啊,扩展程序正在启动IOS 10.请纠正我,如果有什么东西丢失或者有些东西是多余的。