关于iOS Push Notification的响应问题

 
最近在做推送消息的时候遇到一个问题,就是当程序在后台运行时,这时候收到推送消息后,点击应用图标后无法拿到这个消息,至今还未解决,如有能够解决办法的朋友,忘不吝赐教。
 
简单总结一下推送消息的相应情况
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

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

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

转载于:https://www.cnblogs.com/duyuiOS/p/5132833.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值