消息推送

APNS的推送机制

⾸首先我们看⼀一下苹果官⽅方给出的对ios推送机制的解释。如下图

Provider就是我们⾃自⼰己程序的后台服务器,APNSApple Push Notification Service的缩写,也就是苹果的推送服务器。

上图可以分为三个阶段:第⼀一阶段:应⽤用程序的服务器端把要发送的消息、⺫⽬目的iPhone的标识打包,发给APNS

第⼆二阶段:APNS在⾃自⾝身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone

第三阶段:iPhone把发来的消息传递给相应的应⽤用程序,并且按照设定弹出Push通知。

APNS推送通知的详细⼯工作流程

下⾯面这张图是说明APNS推送通知的详细⼯工作流程:

根据图⽚片我们可以概括⼀一下:

1. 应⽤用程序注册APNS消息推送。
2. iOSAPNS Server获取devicetoken,应⽤用程序接收device token3. 应⽤用程序将device token发送给程序的PUSH服务端程序。
4. 服务端程序向APNS服务发送消息。
5. APNS服务将消息发送给iPhone应⽤用程序。

远程推送操作过程简介

1. App启动过程中,使⽤用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请。若注册成功,回调函

application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

会被触发,App可以得到deviceToken,该token就是⼀一个与设备相关的字符串.

  1. App获取到DeviceToken后,将DeviceToken发送给⾃自⼰己的服务端。

  2. 服务端拿到DeviceToken以后,使⽤用证书⽂文件,向苹果的APNS服务器发起⼀一个SSL连接。连接成功之后,发送⼀一段JSON串,该JSON串包含推送消息的类型及内容。

  3. 苹果的APNS服务器得到JSON串以后,向App发送通知消息,使得App的回调函数

application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo

userInfo中即可得到推送消息的内容。

⽤用到的证书⽂文件及⽣生成过程

被调⽤用,App

  1. certSigningRequest⽂文件,该⽂文件在MAC系统中⽣生成,⽤用于在Apple⺴⽹网站上申请推送证书⽂文件。 ⽣生成过程: 打开应⽤用程序中的钥匙串访问软件,从菜单中选择 钥匙串访问”-证书助理”-从证书颁发机构请求证书,邮箱和名称随便填写,然后选择保存到磁盘,就可以在本地⽣生成⼀一个CertificateSigningRequest.certSigningRequest⽂文件。

  2. 注册⼀一个⽀支持pushapp id,后⾯面会⽤用到。 ⽣生成过程: 进⼊入developer.apple.com,选择member center - Certificates, Identifiers & Profiles - Identifiers- App Ids,然后选择注册app id,设置appid名称,同时,app id suffix⼀一栏必须选择explicit app id,然后设置bundleid,最后勾选 App Services中的 Push Notifications,这样就可以注册⼀一个⽀支持pushaphid

  3. 推送证书cer⽂文件,该⽂文件在developer.apple.com中⽣生成,⽤用于⽣生成服务端需要的⽂文件。⽣生成过程: 进⼊入developer.apple.com,选择member center - Certificates, Identifiers &Profiles - Certificates,然后选择创建certificate,类型分为DevelopmentProduct。这⾥里以Development为例,选择Apple Push Notification service SSL (Sandbox) ,然后下⼀一步,选择之前⽣生成的⽀支持pushAppId,然后下⼀一步,提交之前创建的CSR⽂文件,再下⼀一步就可以⽣生成cer⽂文件,然后保存到本地。

  4. ⽣生成服务端使⽤用的证书⽂文件。如果是使⽤用⺴⽹网上的mac PushMeBaby⼯工具,在mac机器上进⾏行推送消息的发送,那么有上⾯面的cer⽂文件就够了。如果是使⽤用PHPjava/c#开发⾃自⼰己的服务端,那么还需要将上⾯面的cer⽂文件做⼀一个转换,⽣生成pem⽂文件或者p12⽂文件。

  5. ⽣生成Xcode使⽤用的provisioning⽂文件,该⽂文件⽤用于真机调试。⽣生成过程:进⼊入developer.apple.com,选择member center - Certificates, Identifiers & Profiles -Provisioning Profiles,然后选择创建Provisioning file,接着选择iOS App Development ,下⼀一步选择AppId,选中之前建⽴立的⽀支持pushappid,接着下⼀一步选择⽀支持pushcertificate,下⼀一步勾选需要⽀支持的device id,最后⼀一步设置provisioning⽂文件的⽂文件名,这样provisioning⽂文件就⽣生成了。

客户端的开发

⾸首先下载前⾯面建⽴立的cer⽂文件和provisioning⽂文件,双击,导⼊入到xcode中,在build settingcode signing⼀一栏⾥里选择这两个⽂文件的名称,这样就可以将⽀支持pushapp部署到真机中。然后是要处理推送消息。

客户端对推送消息的处理分两种情况:

1. App没有运⾏行的情况下,系统收到推送消息,⽤用户点击推送消息,启动App。此时,不会执⾏行前⾯面提到的 didReceiveRemoteNotification 函数,⽽而是在AppapplicationDidFinishLaunching函数中处理推送,通过以下代码可以获取推送消息中的数据:

1. APP处于前台时,系统收到推送消息,此时系统不会弹出消息提⽰示,会直接触发application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary)userInfo函数,推送数据在userInfo字典中。

App处于后台时,如果系统收到推送消息,当⽤用户点击推送消息时,会执⾏行application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo函数, 此时

NSDictionary *userInfo =[launchOptions objectForKey:UIApplicationLaunchOp
tionsRemoteNotificationKey];

AppDelegate中函数执⾏行的顺序为:

applicationWillEnterForeground
application:didReceiveRemoteNotification

applicationDidBecomeActive
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值