繁体   English   中英

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

[英]How to handle push notification when app is in background but not suspended

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM