通过在 iOS10+ 上打开本地通知来检测应用程序是否已启动

Detect if app was launched by opening a local notification on iOS10+

我目前正在将应用程序迁移到新的 UserNotifications 框架。由于用户打开本地通知,我一直在检测应用程序是否已启动。测试用例为:

  1. 安排本地通知
  2. 手动关闭应用程序
  3. 设置Xcode在应用程序启动时自动附加
  4. 等待通知显示并打开它(默认操作)

问题是在这种情况下 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 没有被调用。在 application:didFinishLaunchingWithOptions: 中有一个键 UIApplicationLaunchOptionsLocalNotificationKey,它包含一个 UIConcreteLocalNotification 类型的对象,它是 UILocalNotification 的子类。但是,作为旧通知系统的一部分,UILocalNotification 已被弃用,我们不应该使用它。我查阅了文档和网络,但没有找到问题的答案:

如何判断某个应用程序是否因本地通知而启动?

我如何获得该通知?

确保在您的应用完成启动之前将 UNUserNotificationCenterDelegate 的实现分配给 UNUserNotificationCenter.current(),如 documentation.

中所述

那么您应该会在应用程序启动时使用包含原始通知的响应对象调用您的 UNUserNotificationCenterDelegateuserNotificationCenter(_:didReceive:withCompletionHandler:)。对我来说,它发生在我的 application(_:didFinishLaunchingWithOptions:) 被调用后一段时间。