类似这样的问题: 我如何访问applicationDidBecomeActive远程推送通知的数据?
但不同的是,你怎么能当你在访问通知数据applicationDidBecomeActive
, 如果你有点击应用程序图标,而不是推送通知。
流程是:如果你点击push notification
,然后didReceiveRemoteNotification
将被触发,但如果你点击原来的应用程序图标,只有applicationDidBecomeActive
将被触发, didReceiveRemoteNotification
不会被调用。
我期待为后来的情况下,我怎么能访问推送通知的数据。
(这两种情况下,假设应用程序在后台,但没有被杀死。)
你无法从主屏幕启动应用程序获取远程推送有效载荷。
如果推送数据是使用应用的重要应用推出后,从您的服务器加载它。
@fannheyward答案是绝对正确的。 当应用程序通过点击应用程序图标启动你不能得到有效载荷。
我有一个想法,如果你知道,当应用程序是通过点击应用程序图标启动一些通知正在等待什么。 有了这些知识你的应用程序可以从服务器上获取有效载荷。
您可以在每一个这样的通知设置“徽章”和applicationDidBecomeActive你可以检查[应用applicationIconBadgeNumber]> 0知道一些通知是活动的。 从服务器获取有效载荷后,你可以将其设置为0,如下图所示
[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
请注意:这意味着收到通知时,您的应用程序将有徽章显示了它。 我不知道行为的时候徽章是由用户从设置将其禁用。
如果您的应用程序的目标是在iOS7,你能做的只有当应用程序在研究背景活着。
在Xcode中的功能设置,则应该启用背景模式>远程通知,并写下面的代码。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
// save userInfo in NSUserDefaults
completionHandler( UIBackgroundFetchResultNoData );
}
如果你想测试,这将有助于使用https://github.com/acoomans/SimulatorRemoteNotifications
对于这个工作,我也不得不检查后台抓取框中。
你应该在你的appDelegate这样的事情launchWithOptions方法的通知:
NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
if(remoteNotif != nil){
//Handle your notification
}
文章来源: iOS Push Notification - How to get the notification data when you click on the app icon instead of notification