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

时间:2011-02-24 01:45:12

标签: ios multitasking apple-push-notifications

我想要做一些相当简单的事情。我将自定义数据附加到我在

中处理的推送通知中
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

我正在寻找 UIApplicationLaunchOptionsRemoteNotificationKey ,并且嘿它就在那里。

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

2 个答案:

答案 0 :(得分:108)

在iOS 7及更高版本中查看application:didReceiveRemoteNotification:fetchCompletionHandler:


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

因此,真正的问题是如何确定应用程序是否位于前台,或者用户是否通过推送通知使其处于活动状态。

问题this answerdidReceiveRemoteNotification when in background似乎有关键:

您可以使用以下代码判断您的应用是否只是在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
    ...
}

答案 1 :(得分:-3)

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

- (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);
    }
}