我的应用中的行为推送通知存在一些问题。
如果应用程序没有运行(甚至不在后台),当我触摸通知时,我可以解析其有效负载并执行自定义操作,方法是阅读" launchOptions"字典。
当我的应用程序在后台运行时,我无法通过点击通知来检测用户何时前移应用程序,因为应用程序:didReceiveRemoteNotification:fetchCompletionHandler:在后台立即调用,当我前景应用程序时我无法通过点击应用图标或通知来检查是否已完成。
我知道这是可能的,因为Facebook的Messenger应用程序会这样做 - 如果我点击通知它会把我带到聊天室,否则它会把我带到我之前的位置。
感谢。
答案 0 :(得分:1)
如果用户点按应用图标,则不会调用application:didReceiveRemoteNotification:fetchCompletionHandler
。
如果他们点按通知,则application:didReceiveRemoteNotification:fetchCompletionHandler
会被调用,application.applicationState
将会UIApplicationStateInactive
。
查看this answer以获取可用于快速查看此操作的代码段,以使其更有意义。
此外,为了实现您的目标,请确保在应用程序状态为UIApplicationStateInactive
时进行任何视图更新,而不是UIApplicationStateBackground
。当推送通知进入时,应用程序状态将为UIApplicationStateBackground
。仅当用户通过点击通知启动应用程序时,应用程序状态才为UIApplicationStateInactive
。
我已经看过像
这样的if语句的很多答案if (application.applicationState != UIApplicationStateActive) { ... }
但是,这不允许您区分正在发送的推送通知和用户点击通知。