关于这个主题有很多堆栈溢出线程,但是我仍然没有找到一个好的解决方案。
如果应用程序不在后台,我可以在 application:didFinishLaunchingWithOptions:
呼叫中检查 launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
,看看它是否从通知中打开。
如果应用程序是在后台,所有的职位建议使用 application:didReceiveRemoteNotification:
和检查应用程序的状态。但是正如我所做的实验(也正如这个 API 的名字所暗示的那样) ,这个方法在接收到通知时被调用,而不是被点击。
所以问题是,如果应用程序被启动,然后后台,你知道一个通知是从 application:didReceiveNotification
接收(application:didFinishLaunchWithOptions:
不会触发这一点) ,你怎么知道用户是通过点击通知或只是点击应用程序图标恢复应用程序?因为如果用户点击了通知,预期将打开通知中提到的页面。否则就不应该。
我可以使用 handleActionWithIdentifier
进行自定义操作通知,但这只有在点击自定义操作按钮时才会触发,而不是在用户点击通知的主体时触发。
谢谢。
编辑:
在阅读了下面的一个答案后,我想这样我可以澄清我的问题:
我们如何区分这两种情况:
(A)1.app 进入后台; 2. 接收到通知; 3. 用户点击通知; 4.app 进入前台
(B)1.应用程序进入后台;。接获通知;。用户忽略通知,稍后点击应用程序图标;。应用程序进入前台
因为 application:didReceiveRemoteNotification:
在两种情况下都是在第2步触发的。
或者,如果 application:didReceiveRemoteNotification:
仅在步骤3中触发(A) ,但是我不知怎么地配置了我的应用程序,所以我在步骤2中看到了它?