关于这个话题有很多stackoverflow线程,但我仍然没有找到一个好的解决方案.
如果这个应用程序不在后台,我可以判断launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
inapplication:didFinishLaunchingWithOptions:
呼叫,看看它是否是从通知中打开的.
如果应用程序在后台,所有帖子都建议使用application:didReceiveRemoteNotification:
并判断应用程序状态.但正如我试验过的(正如此API的名称所暗示的那样),此方法在收到通知时调用,而不是点击.
所以问题是,如果这个应用程序启动,然后退出,你知道收到了来自application:didReceiveNotification
的通知(此时application:didFinishLaunchWithOptions:
不会触发),你怎么知道用户是通过点击通知还是仅仅点击应用程序图标来恢复应用程序呢?因为如果用户点击通知,预期会打开该通知中提到的页面.否则就不应该了.
我可以使用handleActionWithIdentifier
表示自定义操作通知,但这只在点击自定义操作按钮时触发,而不是在用户点击通知正文时触发.
谢谢.
编辑:
在阅读了下面的一个答案后,我想通过这种方式我可以澄清我的问题:
我们如何区分这两种情况:
(A)1、APP进入后台;2、收到通知;3、用户点击通知;4、APP进入前台
(B)1、APP进入后台;2、收到通知;3、用户忽略通知,稍后点击APP图标;4、APP进入前台
因为在步骤2中在两种情况下都触发application:didReceiveRemoteNotification:
.
或者,是否应该在步骤3中仅为(A)触发application:didReceiveRemoteNotification:
,但是我不知何故配置了错误的应用程序,所以我在步骤2中看到了它?