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 *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions { nsdictionary *remotenotification = [launchoptions objectforkey: uiapplicationlaunchoptionsremotenotificationkey]; if (remotenotification) { //自定义的bool值,用来标记是从通知启动的应用 self.islaunchedbynotification = yes; }else{ } [self checkislaunchedbynotification]; return yes; }
收到远程推送后 , 可以跳转到消息界面 :
- (void)application:(uiapplication *)application didreceiveremotenotification:(nsdictionary *)userinfo { nsdictionary *aps = [userinfo valueforkey:@"aps"]; nsdictionary *alert = [aps valueforkey:@"alert"]; nsstring * body = alert[@"body"]; if ([uiapplication sharedapplication].applicationstate == uiapplicationstateactive) { //处于前台时 [ebforenotification handleremotenotification:@{@"aps":@{@"alert":[nsstring stringwithformat:@"%@",body]}} soundid:1312]; }else{ //处于后台时 [self gotomessagevc]; } } #pragma mark - 检测是否从通知栏启动得应用 - (void)checkislaunchedbynotification{ if (self.islaunchedbynotification) { [self gotomessagevc]; } } #pragma mark - 点击了通知菜单(当应用在前台时,收到推送,点击了自定义的弹窗,调用的方法) - (void)clickbannerview:(nsnotification *)notification{ nsdictionary * dict = notification.object; [self gotomessagevc]; } #pragma mark - 跳转到消息界面(点击通知菜单/点击通知栏启动应用时) - (void)gotomessagevc{ if([self.window.rootviewcontroller isequal:self.tabbarcontroller]){ if([self.tabbarcontroller.selectedviewcontroller iskindofclass:[uinavigationcontroller class]]){ uinavigationcontroller * nav = self.tabbarcontroller.selectedviewcontroller; if (![nav.topviewcontroller iskindofclass:[messagesviewcontroller class]]) { messagesviewcontroller *messagevc = [[messagesviewcontroller alloc] init]; messagevc.hidesbottombarwhenpushed = yes; [nav.visibleviewcontroller.navigationcontroller pushviewcontroller:messagevc animated:yes]; } } } }
静默推送
应用想收到静默推送需要满足的条件:
1.应用在前台/后台 (应用被杀死就收不到了)
2.应用实现了
application:didreceiveremotenotification:fetchcompletionhandler:
3.如果仅仅实现了application:didreceiveremotenotification:,
没有实现application:didreceiveremotenotification:fetchcompletionhandler:,
应用只有在前台时才能收到静默推送 , 应用在后台时,收不到静默推送
自定义消息推送
介绍: 极光推送提供了自定义消息推送 , 这种推送只有当应用在 前台 时才能收到 ; 当应用在 后台/被杀死 时,这时候的自定义消息被保存下来,直到应用处于前台时,应用才会收到.
使用场景: 当需要在前台处理大量数据的时候,可以使用自定义消息,例如应用某个模块需要更新了,这时候后台发送个自定义消息,等到应用启动了就可以自动去下载
// 使用自定义消息,需要在通知中心注册 // 注册通知 [[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(receivejpushcustommessage:) name:kjpfnetworkdidreceivemessagenotification object:nil]; // 接收到jpush的自定义消息推送 - (void)receivejpushcustommessage:(nsnotification *)notification { nsdictionary *userinfo = [notification userinfo]; nsstring *title = [userinfo valueforkey:@"title"]; nsstring *content = [userinfo valueforkey:@"content"]; nsdictionary *extra = [userinfo valueforkey:@"extras"]; }
总结:
1.应用在后台/前台/被杀死,都可以收到普通的远程推送
2.应用被杀死时,可以通过background fetch短时间唤醒应用
3.应用在后台/前台时,可以通过静默推送,修改一些数据
4.自定义消息应用在
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: 月亮下去了,太阳怎么还不出来
下一篇: 爆笑调皮的浑小子