iphone推送通知push

 关于Push的问题时, 由于最近在研究iOS开发, 详细阅读了苹果官方的开发文档, 觉得有把握把这个问题说说清楚.

 


首先说, 何为Push?

拿起你的爱机, 打开"设置", 你会看到有一项叫做"通知".
为什么这里不叫推送呢? 因为推送(Push)的全称叫"推送通知(Push Notifications)", 对应的还有另一种通知叫"本地通知(Local Notifications)".
二者的区别就在于推送通知来自于互联网, 是走流量的, 而本地通知只是由后台运行的程序发起, 由系统代为显示而已, 不涉及到网络.

hiphotos.baidu.com.jpg

 


Push消息是怎么来的?

当你的手机开机并且联网以后, 手机会把自己的唯一标识(就像身份证号)发送给苹果服务器, 验证成功后, 苹果服务器会把你的标识加密, 生成另一个用来识别推送对象的标识, 然后双方会保持连接, 但是只传少量信号用来验证你还在线. 有多少信号要传呢? 打个比方, 差不多每次传一个标点符号那么少, 只是为了验证你没有关机.
很多人会说Push比较费电, 这个见仁见智了. 不过理论上说不会费多少电的, 而且这也是目前比较先进的实时推送解决方案了.

hiphotos.baidu.com_1.jpg

 


为什么要绕弯子从苹果服务器走?

处于后台运行中的程序是禁止访问网络的, 例如QQPush消息, 是从QQ的服务器发往苹果服务器, 再转发给你的手机, 最后由手机上的系统统一接收, 再转给后台运行中的QQ程序, QQ程序接到数据后决定以什么样的方式显示在对话框上.
这样做的好处是, 所有的Push最终只依靠一条网络连接, 这样即可以对流量有效控制, 也能节省资源, 试想一下要是谁都能在后台访问网络, 自己去更新自己的数据, 那不是乱了套了吗?

hiphotos.baidu.com_2.jpg


为什么Push过来的QQ消息有时候会显示不全?

苹果规定每条Push消息都不能超过256字节(The maximum size allowed for a notification payload is 256 bytes), 超过这一限制的消息会被拒绝. 256字节是多长呢? 你可以理解为256个数字或字母那么长.
这不只是对文字内容的限制, 而是对整个数据包的限制, 例如QQ要想弄清楚Push过来的消息是什么, 起码得知道对方的QQ, 这些都算在256字节之内, 也就是说Push消息内容实际能使用的字数更少, 外加汉字还要减半(一个汉字顶两个英文字母).
另一方面软件作者也要考量屏幕尺寸能容纳的字数, 太大了也会影响美观.

hiphotos.baidu.com_3.jpg

Push会带来泄露隐私吗?

简单的说, 不会.
正如前面那边表示登录苹果服务器步骤的图片, 你的手机向苹果服务器提交手机标识是使用的SSL安全连接, SSL安全连接就是... 就是很牛X的东西, 只有你们两个人看得见.
苹果服务器验证你的手机后会把标识加密起来, 最终软件得到的是加密结果.
还记得当初黑雨越狱美版iPhone那个时代了吗? 许多人打开Push后接收到的却是别人的QQ消息, 就是因为为了越狱的需要, 你的手机标识为修改成同一个了, 所以大家登录苹果服务器后被苹果当成同一个人, 消息自然也就乱了套了.
因此说, 那些软件作者记录并且上传未加密的手机标识的人是不道德的, Push并不是这种不道德行为的理由.

你可能感兴趣的:(iPhone,的)