如果应用程序已经在后台运行,如何响应推送通知视图
我想要做一件相当简单的事情。 我附加一个自定义的数据到我处理的一些推送通知
-(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); } }