您的位置:首页 > 移动开发 > IOS开发

iOS通知的回调时机与处理方法

2016-03-17 00:00 405 查看
最近在做推送消息的时候遇到一个问题,就是当程序在后台运行时,这时候收到推送消息后,点击应用图标后无法拿到这个消息,至今还未解决,如有能够解决办法的朋友,忘不吝赐教。

简单总结一下推送消息的相应情况

1. 当程序处于关闭状态收到推送消息时,点击图标会调用- ( BOOL)application:( UIApplication *)application didFinishLaunchingWithOp tions:( 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 {
//第三种情况
//这里定义自己的处理方式
}
第四种情况: 目前还不确定如何弄,忘各路朋友帮忙解答,不胜感激
只能在applicationWillEnterForeground或者applicationDidBecomeActive,根据发过来通知中的badge进行判断是否有通知,然后发请求获取数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: