首页 > 移动平台 > 详细

关于iOS Push Notification的响应问题

时间:2016-01-15 12:39:54      阅读:234      评论:0      收藏:0      [点我收藏+]
 
最近在做推送消息的时候遇到一个问题,就是当程序在后台运行时,这时候收到推送消息后,点击应用图标后无法拿到这个消息,至今还未解决,如有能够解决办法的朋友,忘不吝赐教。
 
简单总结一下推送消息的相应情况
1. 当程序处于关闭状态收到推送消息时,点击图标会调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个方法,那么消息给通过launchOptions这个参数获取到。

2. 当程序处于前台工作时,这时候若收到消息推送,会调用- (void)application:(UIApplication *)application

didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法

3. 当程序处于后台运行时,这时候若收到消息推送,如果点击消息或者点击消息图标时,也会调用- (void)application:(UIApplication*)application

didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法

4. 当程序处于后台运行时,这时候若收到消息推送,如果点击桌面应用图标,则不会调用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,所以无法获取消息

下面是针对以上4种情况做响应处理:

第一种情况:

if (launchOptions) {

NSDictionary* pushNotificationKey = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

        if (pushNotificationKey) {

            //这里定义自己的处理方式

        }

}

第二、三种情况:

if (application.applicationState == UIApplicationStateActive) {

//第二种情况

        if ([[userInfo objectForKey:@"aps"] objectForKey:@"alert"]!=NULL) {

            [WLHelper showAlert:@"推送消息" msg:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]];

        }

} else {

//第三种情况

//这里定义自己的处理方式

}

第四种情况: 

这时候你肯定是拿不到的

因为推送来的时候如果app进入后台,它已经进了这个回调

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

你可以直接在这个回调进行处理你想要的效果,或者你弄一个变量,把推送过的数据保存起来,在程序后台进入前台的时候加一个判断做你想要的效果

当然最好使用第一种,因为推送来的时候你就把推送给处理了 (还没有验证这个第四种方法,朋友们一起研究)

关于iOS Push Notification的响应问题

原文:http://www.cnblogs.com/duyuiOS/p/5132833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!