iOS的推送通知 - 如何获得通知的数据,当你点击应用程序图标,而不是通知(iOS Push Not

2019-06-27 07:23发布

类似这样的问题: 我如何访问applicationDidBecomeActive远程推送通知的数据?

但不同的是,你怎么能当你在访问通知数据applicationDidBecomeActive如果你有点击应用程序图标,而不是推送通知。

流程是:如果你点击push notification ,然后didReceiveRemoteNotification将被触发,但如果你点击原来的应用程序图标,只有applicationDidBecomeActive将被触发, didReceiveRemoteNotification不会被调用。

我期待为后来的情况下,我怎么能访问推送通知的数据。

(这两种情况下,假设应用程序在后台,但没有被杀死。)

Answer 1:

你无法从主屏幕启动应用程序获取远程推送有效载荷。

如果推送数据是使用应用的重要应用推出后,从您的服务器加载它。



Answer 2:

@fannheyward答案是绝对正确的。 当应用程序通过点击应用程序图标启动你不能得到有效载荷。

我有一个想法,如果你知道,当应用程序是通过点击应用程序图标启动一些通知正在等待什么。 有了这些知识你的应用程序可以从服务器上获取有效载荷。

您可以在每一个这样的通知设置“徽章”和applicationDidBecomeActive你可以检查[应用applicationIconBadgeNumber]> 0知道一些通知是活动的。 从服务器获取有效载荷后,你可以将其设置为0,如下图所示

[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

请注意:这意味着收到通知时,您的应用程序将有徽章显示了它。 我不知道行为的时候徽章是由用户从设置将其禁用。



Answer 3:

如果您的应用程序的目标是在iOS7,你能做的只有当应用程序在研究背景活着。

在Xcode中的功能设置,则应该启用背景模式>远程通知,并写下面的代码。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{ 
    // save userInfo in NSUserDefaults
    completionHandler( UIBackgroundFetchResultNoData );
}

如果你想测试,这将有助于使用https://github.com/acoomans/SimulatorRemoteNotifications

  • 从服务器端,一定要设置内容可用的属性为1的值

对于这个工作,我也不得不检查后台抓取框中。



Answer 4:

你应该在你的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