我的应用程序接收推送通知,并显示相应的信息消息。但是,当我点击消息时,应用程序变为活动但应用程序didFinishLaunchingWithOptions未被调用,这是正确的,我认为,因为应用程序未被暂停,它只是暂停活动。问题是我如何确保用户在应用程序变为前台时单击消息?
答案 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:
以进行更多临时处理。 (注意:userInfo
和launchOptions
在语义上有所不同,但希望这很明显。:))