14

偷窥iPhone Push Notification的幕后

by newkhonsou@twitter

iPhone Push Notification,一个吹得天花乱坠,却又不断跳票的功能,终于在OS3.0上实现。虽然体验糟糕(Tweetie和IM+之间反复切换,每次都需要等待这两个软件加载数据,这种脑残的使用方式能代替多任务?),但是我终于可以在使用Tweetie的同时,挂着MSN了。

既然BB,Nokia,Palm都先后支持了Push,那么它们之间的比较不可避免。Handspring兄有一篇文章详尽的分析了现有Push方式和他们的优缺点。

不清楚苹果的Push方式,就让我们很难把iPhone Push Notification,与其他几个厂家作横向比较。

苹果的Push到底是怎么实现的?

是哪种Push方式?

有何优缺点?

本文,将带你到iPhone Push Notification的幕后,去偷窥一下Push剧中,登场演员的香艳大腿。

—-

苹果的Push Notification是哪一种?

目前流行的Push方式有三种。

短信触发

2G时代长时间的数据连接会影响电话接入的可靠性,所以Pushmail用短信的方式触发。推过来一个你看不到的短信,让系统去连接邮件服务器。

长连接心跳查询

3G时代,语音和数据分离,手机长时间的保持网络连接成为可能。于是可以建立一个连接,设定一定时间间隔,让手机不断的检查服务器的邮件。

长连接IMAP IDLE

网络进步的同时,邮件推送的协议也在不断改进。IMAP开始支持IDLE特性。让手机不需要总去访问服务器。手机的请求过来,邮件服务器可以把回复挂起,有新邮件近来时再发出。

苹果的呢?吝啬的苹果从来不解释这些技术选择的问题,万能的Google也没个所以然。但我手里的iPhone上,一定有Push实现方式的蛛丝马迹。

最终,我定位到了苹果的Push Notification服务器。

IP是17.149.xxx.xxx。 如果你想知道为什么Push Notification有20到30秒的延迟,这个IP就是答案:一台位于美国的主机。没错,日本3G网络下的手机,Push一下,需要横穿整个太平洋!(中美之间的网络通讯恐怕不会快过日美。)

Push方式?答案就在这个TCP连接使用的端口上:5223

使用这个端口的协议源于Jabber后来发展为XMPP。如果这两个词你不知所谓,那么Google Talk你一定知道。

没错,是个IM协议使用的端口!

—-

幕后

5223这个数字就是通向iPhone Push Notification 幕后的大门。他指向一个用XML格式传递消息的开放IM协议。由此,我们可以猜测苹果Push Notification的构架。

服务器和手机上跑着的都是基于Jabber/XMPP协议的类IM程序。手机加服务器为好友,而服务器加所有使用Push的手机为好友(数量一定非常惊人,所以稳定性是问题。这应该也是Push Notification反复跳票的原因。)。

一次Push,就是那个位于美国的服务器中的IM软件,在长长的好友列表中找到你的手机,然后和他说句话。

当然,手机和服务器之间的对话和我们不同。他们不传递牢骚和色情笑话,传XML文件。

用XMPP和Push Notification为关键字Google一下,很容易就找到这个XML文件的例子。这是可读的明码,我们可以从项目名称和值来猜测苹果大概都传了些什么。实际传输中,这个XML应该加过密。

手机端的类IM程序应是名为notifyd的后台进程(拥有root权限),他根据收到的XML文件的内容动作。显示一个Popup出来的消息框,或者,清空你手机的所有数据。

—-

回到前台

洞悉苹果Push Notification的幕后可以回答很多现实的疑问。 比如。。。

是否费电?

看苹果的优化程度,个人的主观体验是耗电增加明显。可类比的是Android后台跑一个Gtalk。两者增加的耗电应该差不多。(用同样协议实现的IM客户端)

为什么有延迟?

因为你在日本的邮件服务器要联络在美国的Push服务器,然后,他再给你发一个跨洋消息。

WIFI和3G下皆可Push?

没错。完全没区别。WIFI下没准还快点。参考Gtalk或者MSN的使用经历。

IMAP IDLE呢?

mail.app支持IDLE,但似乎意义不大。mail.app可能因为内存不足给释放掉。(至少在OS 3.0以前) 而iPhone上的那个IM客户端,似乎总是跑在后台的。

Nokia,BB,还有苹果的,哪个最好?

3G下,似乎还是Nokia的方式理想些。

短信触发也不错。短信的接收非常省电。3G下的数据连接,一旦建立,不会轻易断开。你也不会每封信都去连接邮件服务器。所以这仍然是可靠有效的,久经考验的Push方式。

苹果的也不错。后台多跑个Gtalk而已。只不过Push程序一直保持在后台,TCP连接一旦建立,也不会改变状态。(从来不会出现IMAP连接的close and wait状态。)所有这些应该导致更多耗电。相信这就是苹果在宣传Push耗电时,很保守的使用Preserves(维持,保存)这个词的原因吧。微言大义。:)

Pushmail之外的可能性?

iPhone和Push服务器之间传递的是一个XML文件。这个是一种跨平台,并且可以自定义格式的数据文件。

灵活的Push方式带来无限的可能性。看苹果想赋予iPhone后台的那个IM客户端什么功能了。强制升级,删除程序都是小菜一碟。

越狱之后如果有高人感兴趣,给这个IM进程加个UI,iPhone手机之间能互相加好友也有可能。

安全性?

iPhone和Push服务器之间是通过Internet传输XML文件的。那么威胁来自于两方面:

1 劫持XML并修改。

个人不太担心这个。信息应该是加过密的。破解起来似乎得不偿失。(这意味着别人想要检查Push的内容也比较困难。实时的解密加关键字过滤应该是不可能的任务。除非。。。苹果把密钥交出来。)

2 修改iPhone指向的Push服务器。

越狱的iPhone可能在任何地方装软件,而iPhone的root密码是固定的。让iPhone指向一个非苹果的Push服务器,似乎是更现实的威胁。

—-

偷窥了半天,似乎也没有什么特别的快感?

的确,苹果的大腿,没有想象中香艳。不过,技术上的事情往往如此,少有天才的解法,更多是一层层的现有方案的封装和整合。用户体验的好与不好,其实不关他的事。

既然苹果利用IM协议,查看历史纪录肯定不是问题,早日给我们Palm Pre那种Push内容一览吧!

12 条评论了已经

Trackbacks/Pingbacks.

发表评论

名字(必须)
邮箱(不会被公布)(必须)
网址

使用新浪微博登陆

字体为 粗体 是必填项目,邮箱地址 永远不会 公布。

允许部分 HTML 代码:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs(网站链接)必须完整有效 (比如: http://www.ifanr.com),所有标签都必须完整的关闭。

超出部分系统将会自动分段及换行。

请保证评论内容是与日志或 Blog 内容相关的,灌水、攻击性或不恰当的评论 可能 会被编辑或删除。

      小众论坛

      猫窝论坛

    态度

    ifanr 近期的内容调整

    Loading ... Loading ...

    最新评论

    分类目录

    推荐阅读

      订阅到iGoogle或Google Reader 订阅到鲜果 订阅到抓虾 订阅到飞鸽 订阅到Bloglines 订阅到我的雅虎 订阅到NetVibes 订阅到Newsgatar 订阅到Rojo 订阅到网易有道 通过哪吒订阅到MSN,Gtalk,Skype 订阅到QQ邮箱

      weibo

    @iflea 互助交易群


    @范小叨

    • 坐在电视前人是轻松的,坐在电脑前人是紧张的。电视是家庭生活,需要更轻松的享受。而点播和收视类似于拉取和推送,后者更轻松。RT : 大家都觉得电视不能连到网络上不对劲,但是目前包括苹果,都没有成功的把他连到网络上,这里面差了点什么呢?
    • 99美分一部片,租赁还是购买,似乎是个问题 http://www.ifanr.com/18672
    • 9.1 Apple Press Event 全记录,综合了之前的一些八卦,可全面了解现场一些精华细节,推荐阅读。http://ifanr.in/co2mjZ
    • 美国海军在测试的现实增强软件,用来训练机械维修。他们用了一个头盔,可以将计算机生成的 3-D 图像覆盖在需要维修的设备之上,将每个部件标上名称,然后给出一步步的指导。http://www.ifanr.com/18380

    友链

    功能

    小众论坛