关于iOS Push Notification的响应问题
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
你可以直接在这个回调进行处理你想要的效果,或者你弄一个变量,把推送过的数据保存起来,在程序后台进入前台的时候加一个判断做你想要的效果
当然最好使用第一种,因为推送来的时候你就把推送给处理了 (还没有验证这个第四种方法,朋友们一起研究)