根据didReceiveRemoteNotification when in background,我们以前能够通过点击推送通知上的操作按钮(或者按下推送通知,根据用户看到推送通知的方式)来处理打开应用的用户实现-application:didReceiveRemoteNotification:
,然后在方法内部检查应用程序的applicationState
是否处于活动状态。
在iOS 7中,有新的remote-notification
后台模式,允许应用在向用户显示远程通知时执行后台获取(用户无需对通知执行任何操作)。要支持此模式,您应该实现-application:didReceiveRemoteNotification:fetchCompletionHandler:
方法。
The documentation for -application:didReceiveRemoteNotification:
表示如果你的应用程序委托实现了application:didReceiveRemoteNotification:fetchCompletionHandler:
方法,那么“app对象会调用该方法而不是这个方法。”这意味着我们不能再使用-application:didReceiveRemoteNotification:
来处理远程通知,因为它不会被调用。
我们应该把处理逻辑放在application:didReceiveRemoteNotification:fetchCompletionHandler:
中,但是之前处理它的技巧不再有意义 - 以前,我们依赖于-application:didReceiveRemoteNotification:
的唯一方法应用程序未处于活动状态时调用的是用户是否点按了通知上的操作按钮以打开应用程序。但是,现在,remote-notification
后台模式的重点在于,每次收到远程通知时,它都可以在后台调用application:didReceiveRemoteNotification:fetchCompletionHandler:
,然后用户对其执行任何操作。
那么,我们现在如何判断用户何时使用通知上的操作按钮打开应用程序?
答案 0 :(得分:6)
您仍在application:didReceiveRemoteNotification:fetchCompletionHandler:
UIApplicationStateBackground
- 应用程序在后台接收推送通知UIApplicationStateInactive
- 应用正在通过用户点按通知答案 1 :(得分:0)
我使用此委托功能添加「通知编号」。
因为我们的服务器没有将徽章发送给我们的客户端。 然后我用奇怪的方法用这个委托函数添加「通知号码」,我还在这个函数中添加了一个代码来切换UIViewController。
当我使用服务器推送通知到我的测试应用程序时,我发现测试应用程序的状态在后台,即使我使用的是Twitter或Safari。
我从服务器推送通知后,我的测试应用程序也将UIViewController切换到另一个UIViewController。