首页 > 远程推送-点击应用图标启动应用是否能拿到(NSDictionary *)userInfo这个对象

远程推送-点击应用图标启动应用是否能拿到(NSDictionary *)userInfo这个对象

我现在正在做推送这一块,首先我把推送分为 程序未运行,程序后台挂起,程序前台运行,这三种情况。

然后每种情况里边分为点击推送消息启动应用和点击应用图标启动应用,现在点击推送消息启动应用我都能获取到包含推送消息的(NSDictionary *)userInfo对象。

那么如果程序未运行或者后台挂起,我收到推送消息点击应用图标启动应用,是否有方法可以拿到(NSDictionary *)userInfo对象呢,还是说苹果就是没有办法获取的?


标准的iOS推送是托管向系统的,可以收到


收到推送以后,如果用户没有点推送的通知打开应用,而是直接点击应用图标的话,是拿不到推送的消息的。选择这样处理的原因之一我认为是为了保持系统的简单。因为,假设你收到了2条推送,那么你点击图标的时候,你应该取到哪条推送的内容呢?还是会取到一个数组,里面是历次你没有处理过的推送?这样的系统实现起来显然会复杂很多。

所以,在现在这种方式下,用户点击图标启动应用后,应用应该去向服务器检查一下是否有未处理的新消息。其他答案提到的极光和个推应该都是采用的这种方式,在启动后SDK会自动询问服务器有没有新消息。其他应用例如微信,虽然你通过推送能看到自己收到了几条消息,但是打开微信以后,还是需要等连接到服务器之后才能在对话里看到新消息。


极光测试可以实现

一下描述针对极光推送,可以实现,但是没有细究如何实现的哈。请查看demo个推DEMO集成

在demo中- (void)networkDidReceiveMessage:(NSNotification *)notification中可以接受到非点击通知栏过来的点击消息。
目标文件极光DEMO RootViewController.m 167行开始

个推亲测可以实现

以下描述针对于个推,针对您的极光推送应该也有类似,稍后补充。可以下载个推DEMO测试:个推DEMO集成,详细可以参照这个demo来做一下。至于具体如何实现的,我没有仔细看过程。

- (void)GexinSdkDidReceivePayload:(NSString *)payloadId fromApplication:(NSString *)appId中,针对您直接点击图标或者挂起后重启时接受透传。

写给推送新手,题主忽略

ios处理点击通知栏激发动作有两个
远程透传事件处理
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userinfo

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

本地通知触发事件

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

【热门文章】
【热门文章】