关于推送消息的处理
在接收远程通知的时候
在程序关闭状态下
iOS 程序启动时总会调用application:didFinishLaunchingWithOptions:,其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有此程序启动的原因。
1 若用户直接启动,lauchOptions内无数据;
2 若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的bundle ID (NSString);
3 若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);
4 若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey对应的是启动应用程序的的远程通知信息userInfo(NSDictionary);
5 其他key还有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
6 UIApplicationLaunchOptionsNewsstandDownloadsKey。
②.当程序处于前台工作时,这时候若收到消息推送,会调用- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法
③.当程序处于后台运行时,这时候若收到消息推送,如果点击消息或者点击消息图标时,也会调用- (void)application:(UIApplication*)application
didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法
④.当程序处于后台运行时,这时候若收到消息推送,如果点击桌面应用图标,则不会调用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,所以无法获取消息
第一种情况:
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 {
//第三种情况
//这里定义自己的处理方式
}