关于推送消息的处理

 

在接收远程通知的时候

在程序关闭状态下

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。

 

 

①.当程序处于关闭状态收到推送消息时,点击图标会调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个方法,那么消息给通过launchOptions这个参数获取到。

②.当程序处于前台工作时,这时候若收到消息推送,会调用- (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 {

//第三种情况

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

}

 

 

posted @ 2016-04-22 13:56  BarnettWu  阅读(883)  评论(0编辑  收藏  举报