当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS10最新实现远程通知的开发教程详解

iOS10最新实现远程通知的开发教程详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

超级群侠传2无敌版,分手吧我们分手吧,hy57

一、ios推送通知简介

众所周知苹果的推送通知从ios3开始出现, 每一年都会更新一些新的用法. 譬如ios7出现的silent remote notifications(远程静默推送), ios8出现的category(分类, 也可称之为快捷回复), ios9出现的text input action(文本框快捷回复).

而在ios10, 苹果可谓是大刀阔斧般的, 对远程通知和本地通知进行了大范围的更新. ios10推出了全新的usernotifications框架(ios10之前从属于uikit框架).

新的推送通知框架, 整合了本地推送和远程推送的点击处理方法, 使得以前专门处理推送点击的方法只能处理静默推送了.

二、远程推送通知介绍

1、什么是远程推送

在联网的情况下,由远程服务器推送给客户端的通知,又称apns(apple push notification services)不管应用是打开还是关闭的情况下,都能接收到服务器推送的远程通知在联网状态下,所有苹果设备都会与苹果服务器建立长连接

2、远程推送的实现原理:

      1.打开app时: 发送udidbundleidapns加密后返回devicetoken

      2.获取token后,app调用接口,将用户身份信息和devicetoken发给服务器,服务器记录

      3.当推送消息时, 服务器按照用户身份信息找到存储的devicetoken,将消息和devitoken发送给apns

      4.苹果的apns通过devicetoken, 找到指定设备的指定程序, 并将消息推送给用户

3、实现远程推送功能的前提

      1.真机

      2.调试阶段的证书

         ios_development.cer 用于真机调试的证书

         aps_development.cer 用于真机推送调试能的证书

         xxx.mobileprovision 描述文件,记录了能够调试的手机、电脑和程序

      3.发布阶段的证书

          ios_distribution.cer 用于发布app的证书

          aps.cer 用于发布时,让app有推送功能的证书

          xxx.mobileprovision 描述文件,记录了能够发布app的电脑

如何配置证书, 不在本教程内, 请读者自行处理, 或者参考视频教程

三、ios10 全新远程通知教程

一、 注册远程推送并获取devicetoken

1.创建ios的项目,并输入项目名字

2.在appdelegate中导入头文件:

 #import <usernotifications/usernotifications.h>

3.在application:didfinishlaunchingwithoptions方法中, 注册远程通知

- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions 
 {
 //请求通知权限, 本地和远程共用
 unusernotificationcenter *center = [unusernotificationcenter currentnotificationcenter];
 [center requestauthorizationwithoptions:unauthorizationoptionbadge | unauthorizationoptionsound | unauthorizationoptionalert completionhandler:^(bool granted, nserror * _nullable error) {
  if (granted) { 
   nslog(@"请求成功"); 
    } else { 
    nslog(@"请求失败"); 
    } 
   }];

 //注册远程通知
 [[uiapplication sharedapplication] registerforremotenotifications];

 //设置通知的代理
 center.delegate = self;

 return yes;
 }

4.在接收远程推送的devicetoken方法中, 获取token

 - (void)application:(uiapplication *)application didregisterforremotenotificationswithdevicetoken:(nsdata *)devicetoken
 { 
 //将来需要将此token上传给后台服务器
 nslog(@"token:%@", devicetoken);
 }

二、 ios10远程推送通知的处理方法

当点击了推送后, 如果你希望进行处理. 那么在ios10中, 还需要设置unusernotificationcenterdelegate, 并遵守unusernotificationcenterdelegate协议.

以及实现下面实现3个方法, 用于处理点击通知时的不同情况的处理

      willpresentnotification:withcompletionhandler 用于前台运行

      didreceivenotificationresponse:withcompletionhandler 用于后台及程序退出

      didreceiveremotenotification:fetchcompletionhandler用于静默推送

//设置通知的代理
center.delegate = self;

1.前台运行 会调用的方法

前台运行: 指的是程序正在运行中, 用户能看见程序的界面.

ios10会出现通知横幅, 而在以前的框架中, 前台运行时, 不会出现通知的横幅.

- (void)usernotificationcenter:(unusernotificationcenter *)center willpresentnotification:(unnotification *)notification withcompletionhandler:(void (^)(unnotificationpresentationoptions))completionhandler
 { 
  nsdictionary *userinfo = notification.request.content.userinfo; 

  //前台运行推送 显示红色label
  [self showlabelwithuserinfo:userinfo color:[uicolor redcolor]];

  //可以设置当收到通知后, 有哪些效果呈现(声音/提醒/数字角标)
  completionhandler(unnotificationpresentationoptionbadge | unnotificationpresentationoptionsound | unnotificationpresentationoptionalert);
 }

2.后台运行及程序退出 会调用的方法

后台运行: 指的是程序已经打开, 用户看不见程序的界面, 如锁屏和按home键.

程序退出: 指的是程序没有运行, 或者通过双击home键,关闭了程序.

- (void)usernotificationcenter:(unusernotificationcenter *)center didreceivenotificationresponse:(unnotificationresponse *)response withcompletionhandler:(void(^)())completionhandler
 {
  nsdictionary *userinfo = response.notification.request.content.userinfo; 

  //后台及退出推送 显示绿色label
  [self showlabelwithuserinfo:userinfo color:[uicolor greencolor]]; 

  completionhandler();
 }

3.静默推送通知 会调用的方法

静默推送: ios7以后出现, 不会出现提醒及声音.

要求:

推送的payload中不能包含alertsound字段

需要添加content-available字段, 并设置值为1

例如: {"aps":{"content-available":"1"},"pagekey”":"2"}

 //如果是以前的旧框架, 此方法 前台/后台/退出/静默推送都可以处理
 - (void)application:(uiapplication *)application didreceiveremotenotification:(nsdictionary *)userinfo fetchcompletionhandler:(void (^)(uibackgroundfetchresult))completionhandler
 {
   //静默推送 显示蓝色label
  [self showlabelwithuserinfo:userinfo color:[uicolor bluecolor]]; 

  completionhandler(uibackgroundfetchresultnewdata);
  }

4.处理通知的公用方法

开发中, 点击通知的逻辑应当看自己程序的需求.

这里为了方便演示, 简单的将通知的值, 通过uilabel显示在主界面上.

 - (void)showlabelwithuserinfo:(nsdictionary *)userinfo color:(uicolor *)color
 { 
  uilabel *label = [uilabel new];
  label.backgroundcolor = color; 
  label.frame = cgrectmake(0, 250, [uiscreen mainscreen].bounds.size.width, 300);
  label.text = userinfo.description;
  label.numberoflines = 0;
  [[uiapplication sharedapplication].keywindow addsubview:label];
 }

三、测试远程推送

pushmebaby是一个简单的模拟服务器的mac小程序, 可以将内容提交给苹果的apns服务器.

为了测试远程通知, 我们需要安装此程序.

请前往www.github.com, 搜索并下载pushmebaby

使用时:

编译该项目, 如果报错, 则注释报错的代码, 不影响实际使用.

进入苹果开发者网站, 获取真机调试用的远程推送证书, 导入到项目中

将之前获取到的devicetoken, 及测试的文字, 填入该项目中的appdelegate中的init方法中.

运行此项目, 会出现一个mac小程序, 点击push即可发送远程通知.

 - (id)init { 
  self = [super init]; 
  if(self != nil) { 
   self.devicetoken = @"de20184c ef0461d5 12c76422 f5b78240 5f657e18 ebf91c9f 01d5560c e2913102";
   self.payload = @"{\\"aps\\":{\\"alert\\":{\\"title\\":\\"himeao\\",\\"subtitle\\":\\"自学成才\\",\\"body\\":\\"ios10远程&本地推送教程\\"},\\"badge\\":1,\\"sound\\":\\"default\\"},\\"pagekey\\":\\"1\\"}"; 
   self.certificate = [[nsbundle mainbundle] pathforresource:@"aps_development" oftype:@"cer"]; 
  } 
  return self;
  }

总结

以上就是ios10最新实现远程通知开发教程的全部内容,这篇文章的内容对大家学习ios10还是很有参考借鉴价值的,希望能对各位ios开发者们有所帮助,如果大家有疑问可以留言交流。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网