iOS学习笔记之远程推送、静默推送与自定义消息推送
远程推送时,应用可能处于下列三种状态:
(1).应用开启时,应用在前台
(2).应用开启时,应用在后台
(3).应用未启动(应用被杀死)
从苹果APNS服务器远程推送时:
1.如果应用处于(1)状态,则不会发出声音,会直接调用appDelegate的代理方法didReceiveRemoteNotification,此时如果想收到类似系统的弹窗提示,则需要自定义弹窗,提示音,振动(弹窗可以参考:ForeNotification (本地下载))
AudioServicesPlaySystemSound(1007);//系统提示音 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//震动
2.如果应用处于(2)状态,则会发出提示音,点击推送消息,则会调用appDelegate的代理方法didReceiveRemoteNotification
3.如果应用处于(3)状态,则会发出提示音,点击推送消息,则会开启应用,在下面这个方法中会带上launchOptions这个参数,如果实现了application:didReceiveRemoteNotification:fetchCompletionHandler:这个方法,则会调用这个方法
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
NSDictionary*remoteNotification=[launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(remoteNotification){
//自定义的BOOL值,用来标记是从通知启动的应用
self.isLaunchedByNotification=YES;
}else{
}
[selfcheckIsLaunchedByNotification];
returnYES;
}
收到远程推送后,可以跳转到消息界面:
-(void)application:(UIApplication*)applicationdidReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSDictionary*aps=[userInfovalueForKey:@"aps"];
NSDictionary*alert=[apsvalueForKey:@"alert"];
NSString*body=alert[@"body"];
if([UIApplicationsharedApplication].applicationState==UIApplicationStateActive){
//处于前台时
[EBForeNotificationhandleRemoteNotification:@{@"aps":@{@"alert":[NSStringstringWithFormat:@"%@",body]}}soundID:1312];
}else{
//处于后台时
[selfgotoMessageVC];
}
}
#pragmamark-检测是否从通知栏启动得应用
-(void)checkIsLaunchedByNotification{
if(self.isLaunchedByNotification){
[selfgotoMessageVC];
}
}
#pragmamark-点击了通知菜单(当应用在前台时,收到推送,点击了自定义的弹窗,调用的方法)
-(void)clickBannerView:(NSNotification*)notification{
NSDictionary*dict=notification.object;
[selfgotoMessageVC];
}
#pragmamark-跳转到消息界面(点击通知菜单/点击通知栏启动应用时)
-(void)gotoMessageVC{
if([self.window.rootViewControllerisEqual:self.tabBarController]){
if([self.tabBarController.selectedViewControllerisKindOfClass:[UINavigationControllerclass]]){
UINavigationController*nav=self.tabBarController.selectedViewController;
if(![nav.topViewControllerisKindOfClass:[MessagesViewControllerclass]]){
MessagesViewController*messageVC=[[MessagesViewControlleralloc]init];
messageVC.hidesBottomBarWhenPushed=YES;
[nav.visibleViewController.navigationControllerpushViewController:messageVCanimated:YES];
}
}
}
}
静默推送
应用想收到静默推送需要满足的条件:
1.应用在前台/后台(应用被杀死就收不到了)
2.应用实现了
application:didReceiveRemoteNotification:fetchCompletionHandler:
3.如果仅仅实现了application:didReceiveRemoteNotification:,没有实现application:didReceiveRemoteNotification:fetchCompletionHandler:,应用只有在前台时才能收到静默推送,应用在后台时,收不到静默推送
自定义消息推送
介绍:极光推送提供了自定义消息推送,这种推送只有当应用在前台时才能收到;当应用在后台/被杀死时,这时候的自定义消息被保存下来,直到应用处于前台时,应用才会收到.
使用场景:当需要在前台处理大量数据的时候,可以使用自定义消息,例如应用某个模块需要更新了,这时候后台发送个自定义消息,等到应用启动了就可以自动去下载
//使用自定义消息,需要在通知中心注册
//注册通知
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(receiveJPushCustomMessage:)name:kJPFNetworkDidReceiveMessageNotificationobject:nil];
//接收到JPush的自定义消息推送
-(void)receiveJPushCustomMessage:(NSNotification*)notification{
NSDictionary*userInfo=[notificationuserInfo];
NSString*title=[userInfovalueForKey:@"title"];
NSString*content=[userInfovalueForKey:@"content"];
NSDictionary*extra=[userInfovalueForKey:@"extras"];
}
总结:
1.应用在后台/前台/被杀死,都可以收到普通的远程推送
2.应用被杀死时,可以通过BackgroundFetch短时间唤醒应用
3.应用在后台/前台时,可以通过静默推送,修改一些数据
4.自定义消息应用在
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。