【问题标题】:Detect if app was launched by opening a local notification on iOS10+通过在 iOS10+ 上打开本地通知来检测应用是否启动
【发布时间】:2018-03-31 03:21:21
【问题描述】:

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

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

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

如何查看应用是否因本地通知而启动?

我如何获得该通知?

【问题讨论】:

    标签: ios notifications ios10 unusernotificationcenter usernotifications


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,看来这就是问题所在。我确实设置了委托,但经过一些重构后,它被移到了应用程序启动的后期,而不是“应用程序(_:didFinishLaunchingWithOptions:)”。明天会检查并告诉你结果。
    • 我也想知道这个。我收到 UNUserNotificationCenterDelegate 的 didReceiveNotificationResponse 消息,但是....我如何检测是否收到了 didReceiveNotificationResponse 作为启动应用程序的结果,因为在应用程序未运行时在通知中心单击了通知?在 iOS8(已弃用的通知内容)中,我可以找到检测到这一点的示例,但在 iOS10 中却没有。我应该只比较 didFinishLaunchingWithOptions 和 didReceiveNotificationResponse 之间的时间差吗?
    • 我对此进行了测试,我了解到,在 iOS 10+ 上,您的 didFinishLaunchingWithOptions 委托将被调用,其中包含一个包含键 LaunchOptionsLocalNotificationKey 的 Options 字典,其中包含一个 UILocalNotification 对象,即使通知是使用 NEW UNUserNotificationCenter 和 UNNotificationRequest 创建的。
    • @Wes 是的,我也注意到了这一点,尽管 LaunchOptionsLocalNotificationKey 和 UILocalNotification 已被弃用,所以我想它会消失或充满错误。但它现在有效,发货! :)
    • 您可以通过检查 response.actionIdentifier 来确定通知是在方法 userNotificationCenter 中打开还是关闭。 (Swift 行话。ObjC 应该类似)
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 2015-11-17
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    相关资源
    最近更新 更多