而且这种推送和邮件收发机制PushMail是有不同的,因此请不要用邮件收发的及时性来与应用推送相提并论。
WP推送运作方式:
上图显示了手机上运行的客户端应用程序如何从推送客户端服务:
应用的推送收发,都是需要一个URI验证过程的,这样保证了安全性和防止推送滥用,同时也是推送机制的一个基础,因为URI是微软识别你的手机身份的重要依据。通俗来说如下:
A.建立推送关系:
应用小哥需要每天收发他爹[应用商服务器]的消息,但是有没有新消息,每次都要自己联网去看一下,他觉得很麻烦。
于是,应用小哥走到[手机端系统消息服务]大厅的窗口:我要申请建立一个通知服务,有消息就用大喇叭通知我。
大厅阿姨给远在美国的[微软服务器]大叔发消息:看看这货是我们的VIP吗?是的话就给我一串URI密码。
大叔告诉大厅阿姨:这货确实办了VIP,URI密码现在发给你,请你转交。
大厅阿姨收到URI密码后转交给这个应用。
应用小哥马上把URI密码又告知了他爹[应用商服务器]:有了这个密码,你以后发消息时如果我睡着了,就可以通过大厅喊我起来了。
然后小哥就睡觉去了。
B.获取消息:
[应用商服务器]老爹打算将消息直接发给他儿子应用小哥,但是发现小哥睡着了,于是老爹就把附了URI密码的消息发到[微软服务器]大叔那里,大叔看到密码正确,就把消息放进推送队列,然后告知老爹:你的信息已经收到,正在进入推送队列。
大叔那边的队列到达时,消息就自动传递给了[手机端系统消息服务]大厅阿姨,阿姨收到消息后立刻用大喇叭给应用小哥喊话:XX,快醒醒,你Mon叫你回家吃饭。
C.消息持续收发:
由于应用小哥已经被唤醒(保持运行),因此他与他爹的持续交流可以不再通过[微软服务器]大叔中转了,转而使用点对点的快速交流方式。直到此应用再次沉睡。
通过以上的故事,相信各位对WP推送机制的优势和关键节点有所了解了。最大的一个优势就在于,应用无需要一直保持运行或者在线,因为有[手机端系统消息服务]这个大厅的大喇叭。消息来了,手机系统会通知应用有新消息。
也就是说:各个应用的后台推送任务其实交给了手机系统本身,推送机制的重要特点之一就是可以唤醒沉睡的应用。这个时候,软件本身在不在后台已经不重要了。这也是Skype即使在完全关闭的前提下也能收到推送消息的真正秘诀。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
知道以上关键原理,就可以知道QQ推送的问题根源了:
我这里大胆估计问题应该主要出在[微软服务器]大叔到[手机端系统消息服务]大厅阿姨这个环节,因为这个环节是有队列的,并不是腾讯服务器的消息到达微软服务器后就能马上推送给手机的,而是要经历一个队列过程,WP生态所有应用的推送服务都在交给微软服务器那边排队,虽然每个应用都有自己单独的推送通道,但是QQ的用户量决定了他的消息推送频率又比其他应用高太多了。一旦进入高峰时段,消息势必会因为网络通道的不畅通或者微软服务的推送速率限制,同时又为了保证服务器负载正常,而遭到丢弃或者延迟发送。
有的用户重复收到消息,其实也是延迟造成的。因为在QQ服务器》微软服务》手机客户端,这个过程是需要时间的,一旦在这个时间内用户提前打开了手机QQ(应用打开时收发消息不经过微软服务器),就可能再一次收到同样的消息。
另外有的用户一直收不到消息,有两个原因:
一个是URI验证过程没有完成或者没有建立,另一个是你的网络线路与微软服务器不通。
前者的解决方法是检查:设置》应用程序》后台任务》检查QQ后台是否被阻止(这里提个QQ的BUG,就是在QQ设置里面设置推送开关的时候,有时候要多开关几次就能开启后台推送了,否则你会发现QQ一直被阻止了)。实在不行就重装一下QQ,甚至要重置手机(每个设备只能有 30 个推送通知通道,有的应用会强制占用推送通道,且有的应用卸载后通道仍然在占用,这是微软的BUG,据说正在被解决)。
后者的解决方法就是换自己的网络线路了。
另外注意,电脑QQ在登录的时候,手机QQ是不接受消息的,除非电脑无动静超2分钟。
++++++++++++++++++++++++++++++++++++++++++
关于IOS的推送机制:
IOS也采用了几乎同样的推送流程,只不过WP推送过程中所需要的URI比IOS推送过程中所需要的设备ID所代表的信息量更多,也更安全。因为URI是由微软服务器提供的,而IOS的设备ID是手机本身提供的(早期IOS有种越狱方法需要修改设备ID,但导致的结果就是莫名奇妙收到别人的QQ消息)。IOS的推送现在已经很畅通了,据说IOS在中国北京有推送服务器。
关于Android的推送:
其实从Android2.2开始它也有提供WP,IOS这样的推送机制:Android Cloud to Device Messaging,只不过与微软目前的遭遇一样,网络很不畅通,而且问题更严重,谷歌服务器连接中国用户,你知道的。
因此Android应用商都不使用这种消息收发方式,转而使用需要一直保持在线的真后台方式,也就是客户端到服务器端直接的交换数据。所以Android消息不会漏掉,也更及时,但是根据能量守恒的定律,Android资源消耗,必须因此而高啊,而且安全性必须依赖用户智商。
必须致敬黑莓:
用过黑莓的人,应该很清楚他有个必须提到的优势之一,就是他的信息安全性和推送,其实IOS和WP几乎就是在黑莓的推送机制的基础上做进化的。
WP,IOS平台所有第三方应用的消息收发统一由手机系统内部的notification service来管理,应用无需开启或者后台运作。而Android则多种方式都有,主流情况是各个应用都有自己的一套信息收发方式和通道,虽然Android现在也内置了notification service,但估计国内是很少有应用商用的了。
综上所述:WP推送机制优势明显,如果手机里面有大量应用,且不考虑用户优化,那么理论上WP比安卓更加省电省资源,只不过在目前的网络状况下这种推送机制实在体现不出威力,只能寄希望予微软尽快在大陆建立网络线路通畅的消息推送服务器,把美国大叔变成本地大叔,或者妥协:提供接口让WP应用使用Android那样的虽然耗资源但至少稳定的方案。
另外,很多人想要真后台,其实最主流的原因无非是想要QQ能收到消息。那么在如此的推送机制下面,后台问题是否值得纠结?我想,你已经有答案了。
++++++++++++++++++++++++++++++++++++++++++++++++
以上整理和参考自:
http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/ff402558(v=vs.92).aspx
http://www.zhihu.com/question/20047884/answer/13815619
http://www.cnblogs.com/zhangkai2237/archive/2012/02/19/2358331.html
http://www.cnblogs.com/nokiaguy/p/3304192.html
http://wenku.baidu.com/view/47524ced0975f46527d3e1cc.html