1、实现provider向APNS推送消息

在通过provider向APNS发送消息之前,我们首先需要了解需要发送的格式,APNS的信息结构包如下图:

上图显示的这个消息体就是我们的服务器(Provider)发送给APNS服务器的消息结构,APNS验证这个结构正确并提取其中的信息后,再将消息推送到指定的设备。这个结构体包括七个部分:

第一个部分是命令标示符;

第二部分是一个表示这个通知的一个表示位,如果apns不能解释该通知,就返回一个错误包;

第三部分是一个以秒标识的时间值,它标识通知是否有效,标识的通知时间与UNIX之差与当前时间与UNIX时间之差,如果大于零,APNS最少通知一次,如果小于同于零APNS不在存储通知(网络字节顺序)。

第四个部分是我们的device_token的长度,

第五部分是我们的device_token字符串,

第六部分是推送消息体(Payload)的长度,

最后一部分也就是真正的消息内容了,里面包含了推送消息的基本信息,比如消息内容,应用Icon右上角显示多少数字以及推送消息到达时所播放的声音等。

接下来我们拆解看一下Payload(消息体)的结构:

这其实就是个JSON结构体,alert标签的内容就是会显示在用户手机上的推送信息,badge显示的数量(注意是整型)是会在应用Icon右上角显示的数量,提示有多少条未读消息等,sound就是当推送信息送达是手机播放的声音,传defalut就标明使用系统默认声音,如果传比如“beep.wav”就会播放在我们应用工程目录下名称为beep.wav的音频文件,比如当手机锁屏时QQ在后台收到新消息时的滴滴声。

provider通过APNS提供的接口,通过Socket进行异步通信,

在Production环境下面通过gateway.push.apple.com,端口:2195

在Development环境下通过gateway.sandbox.push.apple.com 端口:2195

Provider可以建立多个与APNs的连接。每个都得用TLS(or SSL)来建立安全通道,需要用到SSL证书(就是上面提到的provider连接APNs要用到的SSL证书)。
发送消息的二进制接口和消息的数据包格式
消息须是网络字节顺序(即大尾顺序),消息里面的payload部分不可以超过256字节,且不得以'\0'结尾。

有这么一种情况,当我们将应用从设备卸载后,推送的消息改如何处理呢。我们知道,当我们将应用从设备卸载后,我们是收不到Provider给我们推送的消息的,但是,如何让APNS和Provider都知道不去向这台卸载了应用的设备推送消息呢?针对这个问题,苹果也已经帮我们解决了,那就是Feedback service。他是APNS的一部分,APNS会持续的更新Feedback service的列表,当我们的Provider将信息发给APNS推送到我们的设备时,如果这时设备无法将消息推送到指定的应用,就会向APNS服务器报告一个反馈信息,而这个信息就记录在feedback service中。按照这种方式,Provider应该定时的去检测Feedback service的列表,然后删除在自己数据库中记录的存在于反馈列表中的device_token,从而不再向这些设备发送推送信息。连接Feedback service的过程同样使用Socket的方式,连接上后,直接接收由APNS传输给我们的反馈列表,传输完成后断开连接,然后我们根据这个最新的反馈列表在更新我们自己的数据库,删除那些不再需要推送信息的设备的device_token。从Feedback service读取的数据结构如下:

结构中包含三个部分,第一部分是一个时间戳,记录的是设备失效后的时间信息,第二个部分是device_token的长度,第三部分就是失效的device_token,我们所要获取的就是第三部分,跟我们的数据库进行对比后,删除对应的device_token,下次不再向这些设备发送推送信息。

The Feedback Service
feedback service包含了这样的列表:某iOS应用程序对应的"设备"("设备"用二进制格式的设备token来标识)。--这些设备是由于各种原因而不能接收APNs发来的消息。
Provider应该定期查询这个列表,并且作出对应处理,如:停止向这些的设备发送消息。

provider访问feedback server通过一个与发送消息类似的二进制接口。
Production环境通过feedback.push.apple.com:2196来建立连接,Development通过feedback.sandbox.push.apple.com:2196。

feedback service和发送消息是不同的服务接口(但都属于APNs),他的连接方式和发送消息是一样的。也要通过证书建立SSL连接,连接后你不需要发送任何命令,直接开始读取流一直读完为止,然后provider要解析读到的数据。

数据是由多个这样的格式组成的:
| 四字节时间 | 2字节的token 长度 | 32字节的设备token |
关 于"四字节时间":Provider需要判断对应设备的这个iOS应用程序有没有在该时间之后重新像provider发送注册推送消息所获得的设备 token。如果没有,就认为该设备失效了,需停止向该设备发送消息。如果有,那就是这个设备失效过,但是现在又有效了,只是feedback service还没来得及刷新列表。

.Net实现推送下载:http://download.csdn.net/detail/u011872945/6881181

IOS 苹果推送 APNS(三)相关推荐

  1. iOS:苹果推送(APNS)-pem/p12证书的生成

        pem文件是服务器向苹果服务器做推送时候需要的文件,主要是做服务器的小伙伴们要用,下面介绍一下pem文件的生成. 打开KeychainAccess,在Certificates里面找到上篇文章中 ...

  2. 苹果推送APNS总结(转载NickJackson的博客)

    2015年之前: 开发状态服务器地址   gateway.sandbox.push.apple.com      2195 产品状态服务器地址  gateway.push.apple.com      ...

  3. Php运行lpush失败,php苹果推送APNS push常用出错和解决方法

    今天早上发现app的通知突然就发送失败了,之前一直都是正常的,真是郁闷,就马上下载代码调试,花费了大半天的时间调试发现尽然是push的证书过期了,最后叫ios的同事重新生成证书就可以解决了. 现在总结 ...

  4. 客户端技术:一文带你了解iOS消息推送机制

    导语 | 消息推送我们几乎每天都会用到,但你知道 iOS 中的消息推送是如何实现的吗?本文将从推送权限申请,到本地和远程消息推送,再到 App 对推送消息的处理等多个步骤,详细介绍 iOS 中消息推送 ...

  5. 苹果 iOS推送 APNS(本人亲测总结)

    文章目录 1.静默推送(发透传消息)总是收不到(iOS静默通知(iOS Silent Notification):需要进一步验证 2.推送的相关方法 3.模拟推送的工具 3.1 在appstore上搜 ...

  6. [转]iOS 远程推送(APNs)

    我是搬运工.原帖:http://blog.csdn.net/lifengzhong/article/details/7737028 目录(?)[-] 一简介 二使用步骤 step1 step2 ste ...

  7. 苹果推送通知服务(APNs)编程(转)详细步骤

    iPhone 对于应用程序在后台运行有诸多限制(除非你越狱).因此,当用户切换到其他程序后,原先的程序无法保持运行状态.对于那些需要保持持续连接状态的应用程序(比如社区网络应用),将不能收到实时的信息 ...

  8. IOS消息推送之APNS

    一.背景概述: 1,环境配置 APNS:Apple Push Notification Service.本文对推送相关概念不再赘述,只侧重完整流程. Demo 开发环境:Mac os 10.9.4   ...

  9. 苹果服务器怎样推送消息,ios消息推送

    之前一篇说了ios推送证书的生成.这是开发推送的基础环境.这次介绍的是怎么去开发. 来几句废话: 苹果的推送相比于安卓的推送,显得更加清晰,简明许多.首先不必考虑那么多厂商配置,其次苹果的送达率要比安 ...

最新文章

  1. 记linux与Windows之间实现文件实时同步的方案
  2. 官方数据:5次SDN大会的背后
  3. ajax的几种格式,jQuery-----jQuery的几种ajax获取json格式数据的方法
  4. Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
  5. 快手春节活动奖励未到账,被羊毛党投诉上了全国12315平台
  6. 封装属性_「Python基础学习」之封装大法
  7. mac下修改mysql连接数_MySQL最大连接数设置
  8. eclipse中出现代码覆盖的颜色信息,如何去掉
  9. 360浏览器打开html不能正常显示图片,360浏览器网页不显示图片?如何显示出来...
  10. Java 函数式编程的妙用
  11. Anki显示音标问题
  12. 财商大电影——10部可以锻炼财商思维…
  13. Python3:批量读取excel百度分享链接保存到百度网盘
  14. python无法打开h5权限_求助:python post请求访问不到数据
  15. 微信公众号如何上传html5,微信平台公众号怎么上传视频? 视频支持哪些格式
  16. Android:微信授权登录与微信分享全解析
  17. python计算AUC、Accuracy、Recall、Precision和PPV
  18. 乌班图linux分辨率不能调,ubuntu18.04 分辨率设置(双屏幕显示,添加没有的分辨率)...
  19. 用python计算符号函数一元定积分和不定积分
  20. jquery使用html()css不生效,jquery可以添加css样式吗?

热门文章

  1. 广西大学计算机专业电子信息,广西大学计算机与电子信息学院
  2. 图片 制作html代码,用HTML代码制作的各种图片效果
  3. 如何申请163邮箱账号?vip邮箱有什么好处?收费邮箱注册哪个好?
  4. Mosquitto AUTH认证
  5. linux下oracle升级,Linux下升级ORACLE 10
  6. 【情人节】--可变色爱心,可写下爱人名字
  7. 从键盘键入任意一个字符,判断该字符是英文字母(不区分大、小写)、数字字符还是其它字符。
  8. python实现给图片添加高斯噪声
  9. php excel导出sheet表,phpexcel来做表格导出(多个工作sheet)
  10. 行为金融(十一):金融市场泡沫