如何在应用程序处于后台但未暂停时处理推送通知

时间:2015-06-16 13:26:49

标签: ios apple-push-notifications

我的应用程序接收推送通知,并显示相应的信息消息。但是,当我点击消息时,应用程序变为活动但应用程序didFinishLaunchingWithOptions未被调用,这是正确的,我认为,因为应用程序未被暂停,它只是暂停活动。问题是我如何确保用户在应用程序变为前台时单击消息?

2 个答案:

答案 0 :(得分:6)

我认为你要找的是这个app delegate方法:

- (void)application:(UIApplication *)application     
       didReceiveRemoteNotification:(NSDictionary *)userInfo

如果您的应用程序是后台运行,则会调用它,并且通知有效负载将在userInfo字典中传递。这与应用程序从冷启动启动时的情况形成对比,此时此方法被调用,而是您在launchOptions字典中检查有效负载。

然而首选的方法是这样做的,因为iOS7将使用它:

- (void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo 
             fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;

当用户点击通知时,无论应用程序是从冷启动启动还是从后台运行,都会调用此方法。因此,即使您没有使用completionHandler,它也可以提供更一致的方式来访问通知负载。如果存在此方法,则不会调用较旧的方法。

答案 1 :(得分:0)

如果我正确理解了这个问题,那么您就会问如何确保应用程序被带到前台,因为用户“点击”即按推送通知

当应用根本没有运行时,您可以在提及时使用-application:didFinishLaunchingWithOptions:。 launchOptions字典包含有效负载等。 - 我不会描述这个,因为你已经知道它是如何工作的。

但是,当应用程序运行时,不会调用该方法。而是调用- application:didReceiveRemoteNotification:。顺便说一句,如果应用程序已经在前台,或者如果它在后台并且用户“点击”推送通知横幅/警报以打开应用程序,则会调用此方法。它不会被另外调用:所以我相信这是完全你正在寻找的东西。

此方法提供的userInfo字典将包含通知数据,类似于-application:didFinishLaunchingWithOptions:以进行更多临时处理。 (注意:userInfolaunchOptions在语义上有所不同,但希望这很明显。:))