如果应用程序已经在后台运行,如何响应推送通知视图

我想要做一件相当简单的事情。 我附加一个自定义的数据到我处理的一些推送通知

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

我寻找UIApplicationLaunchOptionsRemoteNotificationKey和嘿presto那里。

如果我的应用程序第一次启动,该方法只会被调用。 如果我的应用程序已经在后台运行,并且用户按下了通知上的“查看”button,那么如何读取相同的密钥? 我想把它们发送到一个特定的视图控制器上打开数据,就像我第一次从通知中启动应用程序一样。

检出application:didReceiveRemoteNotification:fetchCompletionHandler:在iOS 7及更高版本中。


方法application:didReceiveRemoteNotification:如果您的应用程序在前台运行,则会调用该方法。 如果您的应用程序在后台运行,并且用户使用您的推送通知(从而使您的应用程序处于活动状态),也会调用它。

所以,真正的问题是如何确定应用程序是否处于前台,或者是否由用户使用您的推送通知来激活。

它看起来像这样的答案 didReceiveRemoteNotification时,在后台有关键:

你可以告诉你的应用程序是否被带到了前台,或者不在application:didReceiveRemoteNotification:使用这一点的代码:

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { if ( application.applicationState == UIApplicationStateActive ) // app was already in the foreground else // app was just brought from background to foreground ... } 

要检测应用程序是否被远程通知激活,请尝试以下操作:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (userInfo == NULL) { NSLog(@"didFinishLaunchingWithOptions user startup userinfo: %@", userInfo); } else { NSLog(@"didFinishLaunchingWithOptions notification startup userinfo: %@", userInfo); } }