首先要说明两个概念:本地通知和远程推送。本地通知是由本地应用触发的,接收会比较及时。远程推送是通过苹果的APNs发送到应用客户端的。
以下有处理推送的三种状态:
一.APP没有被杀掉进程的时候,会根据是本地通知还是远程推送来调用不同的函数
//本地通知
-(void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification {
...
}
//远程推送
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
...
}
//远程推送时苹果官方文档更推荐使用这个
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler
{
}
二.APP在杀掉进程的时候,当我们通过通知进入APP时,会调用下面的函数
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
//检查是否从通知启动
if(launchOptions)
{
NSDictionary* remoteNotification=[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSLog(@"remoteNotification%@",remoteNotification);
}
}
三.判断接收消息时的状态
//当应用程序在激活状态时接到通知,会是如下状态
if(application.applicationState == UIApplicationStateActive) {
...
//当应用程序在后台挂起时接到通知,用户进入应用后,会是如下状态
}else if(application.applicationState == UIApplicationStateInactive) {
...
}
在我们了解了以上三点后,就可以根据不同的情况处理推送消息了。
天伦物业项目的要求是不管APP在什么状态点击推送都要跳转到相应的页面,这个时候我们通过第一点和第二点会调用的函数,解析收到的消息字典获取不同的type值,做相应的跳转。
我完成的仟询项目的要求是APP在活跃状态下是不处理推送的,我们接收到消息的情况下,可以通过第三点来判断APP状态做相应的处理
文/zyh1158(简书作者)
原文链接:http://www.jianshu.com/p/4126ce0fe13f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。