1.BB,Nokia,Palm都先后支持了Push,目前流行的Push方式有三种。
(1)短信触发:2G时代长时间的数据连接会影响电话接入的可靠性,所以Pushmail用短信的方式触发。推过来一个看不到的短信,让系统去连接邮件服务器。
(2)长连接心跳查询:3G时代,语音和数据分离,手机长时间的保持网络连接成为可能。于是可以建立一个连接,设定一定时间间隔,让手机不断的检查服务器的邮件。
(3)长连接IMAP IDLE:网络进步的同时,邮件推送的协议也在不断改进。IMAP开始支持IDLE特性。让手机不需要总去访问服务器。手机的请求过来,邮件服务器可以把回复挂起,有新邮件近来时再发出。这个过程中,客户端和服务器也是一直连接的。
2.iPhone推送通知的工作机制可以简单的概括为下图:Provider是指某个iPhone软件的Push服务器,APNS 是Apple Push Notification Service(Apple Push服务器)。
(1)、Provider: 用来向APNS发送消息
(2)、APNS: Apple_Push_Notification_Service 苹果消息推送服务器
(3)、iphone:用来接受APNS下发下来的消息推送
(4)、Client App: 安装在iphone上面的程序 (用来接收iphone传递APNS下发的消息到制定的一个客户端 app)
iPhone在开启Push的时候,会连接 APNS建立一条TLS加密链接。每一台正常的iPhone都有一个独有的设备证书,而APNS也有一个服务器证书。两者建立的时候,会验证彼此的证书有效性。
TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。
http://www.cocoachina.com/iphonedev/sdk/2011/1124/3599.html
http://hi.baidu.com/nasa007/blog/item/369b15ca4b34318cc81768ef.html
http://slj.me/2010/02/iphone-push-notification/
http://marshal.easymorse.com/archives/3312
http://blog.csdn.net/linkai5696/archive/2011/04/12/6316929.aspx
http://www.cocoachina.com/newbie/basic/2010/0401/900.html
http://blog.csdn.net/sjzsp/article/details/6323070
3.苹果为软件开发者们提供了三种信息提醒方式:显示警告框,播放自定义声音,更新应用程序标志。
应用程序长时间后台运行,会过度消耗电能是使用推送通知的最大的缘由。
苹果并不保证推送通知的到达及顺序。
APNS和iPhone手机间的消息使用json格式,并且每条消息最大为256字节。
iPhone收到推送请求后,执行一系列检查,如果客户端程序在运行,它会通过应用程序委托将消息发送到应用程序,如果没有运行,它会执行警告,显示文本,播放声音或更新标志。
推送提供商必须提供安全套接字层认证,和令牌,标识要通知的手机和应用程序。
APNS反馈服务列出未能接收到通知的设备。
在Guides\Local and Push Notification Programming Guide 中查有关推送通知的文档。
4.当前Push Mail技术概览
(1)传统的sms push
黑莓(Blackberry)手机能够在美国火起来,支持Push是一个主要原因。运营商通过 类似短信的方式,将新邮件通知给手机,这就是传统的Push方式,我们称之为SMS Push。在GSM中,32个时隙信道中有30个通话通路,而另外2个被预留用来传递管理和控制信令。而短信正是走的这个通道,因此收发短信和打电话并不 冲突,也非常灵活。可见,SMS Push需要运营商的支持,在中国,中国移动也发现了这个商机,他们自然不会免费提供这个服务,也不会提供通用的API接口给其他邮箱运营的公司(如网易、腾讯)使用,而是他们自己开发了139mail。当然,你如果需要Push,就需要按月缴纳一些费用。
(2)ip push
只有运营商可以提供Push,而他们又盯上了邮箱这个领域,其他邮箱运营的公司要想和移动竞争,似乎已经输在了起跑线上,然而事情并非如此。与传统稳重的 大国企相比,新兴IT公司的优势就是具有不断的创新精神和强大的开发团队。其实Push不一定非要通过SMS实现,用Internet也可以。通过网络,手机客户端可以发送一个HTTP请求到服务器,告知服务器客户端需要这个用户的新邮件通知,当服务器收到一封新邮件时,就会回复这个HTTP请求;客户端通知用户收到了新邮件,并同时再次与服务器建立连接,等待下一封信。有些人觉得只有“SMS Push”才是真Push,IP Push是伪Push。他们为什么会这么想呢?因为他们觉得IP Push需要保持连接,浪费了流量、电量、网络资源。 那事实是这样吗?其实并非如此。我们首先思考这样一个问题,你打电话给你的朋友,为什么基站在很短几秒钟之内就可以通知到对方的手机有一个来电呢?那是因 为其实基站时刻都在跟你的手机保持着连接。所以SMS path也需要“保持连接”,再进一步思考,其实只要能够保持和基站的连接,其实就已经可以保持网络连接了,而其实等待一个HTTP的响应 (reponse)或者说维持一个TCP连接,额外开销并不大。用“网易掌上邮”和尚邮push mail等IP Push的实测结果是,打开Push和关闭Push,电量并没有明显消耗,一天消耗的流量大概是50-60KB,也就相当于打开一个不太复杂的web页面所产生的流量。
(3)imap idle push
IMAPIDLE 模式是 IMAP 协议的一项高级功能,在这种模式下,客端登录连接服务器后并无主动查询新邮件的动作,而是停留在 IDLE(空闲) 状态,当服务器接收到新邮件后通知客端,客端再开始查询新邮件的动作,此动作完成后,客端重新回到空闲状态。所以也可以算是一种push的方式。目前 gmail实现了这个功能。
IMAP IDLE 模式是 IMAP 协议的一项高级功能,在这种模式下,客端登录连接服务器后并无主动查询新邮件的动作,而是停留在 IDLE(空闲) 状态,当服务器接收到新邮件后通知客端,客端再开始查询新邮件的动作,此动作完成后,客端重新回到空闲状态。使用 IMAP IDLE 模式的好处是,服务器收到新邮件时客端马上就会收到通知
不支持 IMAP IDLE 的客端或者服务器,检查新邮件是靠客端手动刷新或者定期查询(比如每5分钟),这种方式查询新邮件会有时间延迟,如果新邮件没有赶上上次查询,必须等到客端下次查询时才能收到通知
IMAP IDLE 和 Push email 还是有区别的,Push email 是服务器主动把邮件推送到客端;而 IMAP IDLE 是客端主动登录服务器并保持连接才可以,用电话作例子来说,IMAP IDLE 就像是客端打电话到服务器后进入待机状态等待服务器回答,而 Push email 则是服务器直接打电话给客户端。
Gmail 目前并不支持 Push email,需要通过第三方支持(如 http://mobile.emoze.com/) 才能实现 Push email 的功能,这是因为 Gmail 在客端没有登录的情况下不知道如何把邮件推送到你的手机;如果使用 IMAP IDLE 功能,服务器只会通知客端有新邮件,而下载新邮件的工作还是客端完成的,并且这个过程中客端必须一直保持与服务器的连接才能收到通知进而完成下载邮件的工 作,严格说这并不是 Push。
Push Mail 必须和运营商合作。IMAP IDLE模式需要邮件客户端一直连接服务器。
这对于手机应用来说,还不是问题,因为手机是按照流量收费,连接不产生流量。至于消耗的电池,有测试过,让手机5分钟联网一次和一直连接,消耗的电量是一样。甚至更少。
4.cmwap为什么不能实现IP Push?
cmwap是中国移动提供的一种接入点。可以访问wap站点、收发短信和通过10.0.0.172代理接入Internet。就是说,使用cmwap接 入,你的网络访问是需要通过移动提供的代理完成。而这个代理设置了严格HTTP请求超时(1分钟左右),可以简单的理解为一个TCP连接在没有数据传输的 时候,最多只能维持一分钟。要想在cmwap下实现IP Push,就必须每分钟发起一个请求来保持网络连接。这个成本显然是很大的,会消耗比较大的流量和电量。因此,cmwap是很难做到IP Push的。
5.2195端口
6.Apple推送通知服务教程
http://article.ityran.com/archives/194
邮件推送实现原理和方法浅析