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

taf*_*rel 9 apple-push-notifications ios

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

fou*_*dry 6

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

- (void)application:(UIApplication *)application     
       didReceiveRemoteNotification:(NSDictionary *)userInfo
Run Code Online (Sandbox Code Playgroud)

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

但是,自iOS7以来这样做的首选方法是使用它:

- (void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo 
             fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
Run Code Online (Sandbox Code Playgroud)

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