【发布时间】:2015-11-10 18:28:03
【问题描述】:
关于这个话题的stackoverflow线程很多,但我还是没有找到好的解决方案。
如果应用不在后台,我可以在application:didFinishLaunchingWithOptions: 调用中检查launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey],看看它是否从通知中打开。
如果应用在后台,所有帖子都建议使用application:didReceiveRemoteNotification:并检查应用状态。但正如我所试验的那样(也正如这个 API 的名称所暗示的那样),这个方法在收到通知时被调用,而不是被点击。
所以问题是,如果应用程序已启动然后后台运行,并且您知道收到了来自application:didReceiveNotification 的通知(此时application:didFinishLaunchWithOptions: 不会触发),您如何知道用户是否恢复了应用程序通过点击通知或只是点击应用程序图标?因为如果用户点击了通知,则期望打开该通知中提到的页面。否则不应该。
我可以将handleActionWithIdentifier 用于自定义操作通知,但这只会在点击自定义操作按钮时触发,而不是在用户点击通知主体时触发。
谢谢。
编辑:
在阅读了下面的一个答案后,我想通过这种方式我可以澄清我的问题:
我们如何区分这两种情况:
(A) 1.app进入后台; 2.收到通知; 3. 用户点击通知; 4. 应用进入前台
(B) 1.app进入后台; 2.收到通知; 3. 用户忽略通知,稍后点击应用图标; 4. 应用进入前台
因为application:didReceiveRemoteNotification: 在第 2 步的两种情况下都被触发。
或者,application:didReceiveRemoteNotification: 是否应该在步骤 3 中仅针对 (A) 触发,但我以某种方式配置了我的应用程序错误,所以我在步骤 2 中看到了它?
【问题讨论】:
-
为您的有效负载使用自定义字典值并采取相应措施。很简单。
-
@soulshined 有效载荷中的一个字典可以表示用户是否点击了通知,对吗?例如您的朋友 A 发布了一篇文章 B,您可以在有效负载中说 {user: A, article: B},而应用程序在后台,您会收到 didReceiveRemoteNotification。如何知道应用何时恢复,是否应该显示文章?
-
@soulshined 我确实阅读了文档,并且确实了解了 didReceiveRemoteNotification 的作用。你真的读过我的问题吗?根据 Apple 的官方文档 didReceiveRemoteNotification “告诉代表正在运行的应用程序收到了远程通知”。我在问什么是判断用户是否点击通知的好方法。您提到的 SO 链接适用于当应用程序从新开始启动时,我问的是应用程序在后台时的场景。
-
@soulshined 好吧,也许我说得不够清楚。我的意思是如果应用程序完全退出,而不是在后台,是的 didFinishLaunching 将被调用。但是,如果您启动您的应用程序,然后将应用程序置于后台,现在一个通知进入,并且用户点击该通知,现在不会再次调用 didFinishLaunching。相反,将调用 applicationWillEnterForeground 和 applicationDidBecomeActive。您如何判断应用正在进入前台,因为用户点击了通知或应用图标?
标签: ios swift push-notification apple-push-notifications