这几年随着iPhone、iPad等苹果产品的风靡,推送技术在国内也越来越热门。但目前国内这块相关资料不多,有不少人对这个还不太了解,我因为工作原因接触的比较多,就给大家讲讲我对推送的理解,还有推送在国内外的一些情况,和大家交流下,也算是对工作的总结。限于我个人的水平,如果有讲得不太准确的地方,还请大家指出来。
  讲到推送就不得不提到另一种技术—拉取(Pull)。虽然我尽量避免文章过于专业,但一些背景相关知识介绍还是没法避免。拉取是是用户从网站上主动“拖下”数据,举个应用最广泛的例子,我们平常打开IE、火狐浏览器上网背后使用的就是拉取技术。回想下通常的场景,我们在地址栏输入网址(由于网址不太容易记忆,国内不少用户都是如hao123这类网址导航打开网站,本质上是一样的),网站后台服务器收到访问请求后就向我们返回网站的相关数据,然后我们的浏览器负责把接收到的数据按照标准格式解析出来,这样呈现在我们面前的就是布局规整容易理解的网页(如淘宝网页)。
  这里特意要强调的一点就是拉取(Pull)技术是用户主动去获取信息(比如浏览器那个例子中浏览器以固定时间刷新来接收服务器传回内容,与之相对是推送(Push)技术。推送技术通常是由那些内容提供商(通常是网站主)主动向我们发送信息。两者的区别是谁主动(虽然不甚准确但可以这样理解)。这样讲有点抽象,给大家举个例子,比如最近很火的新浪微博,你手机上安装了新浪微博,一旦别人在你的微博下发表评论,你就会在几秒钟内收到通知告诉你谁谁谁给你留言了,和短信一样快,当然前提是你的手机必须联网。
  推送之所以逐渐取代拉取技术,主要在于它可以将用户感兴趣的消息直接发送到用户的终端设备,减少用户用于网络上搜索的时间。 而从后台角度,推送技术可使服务器和终端间的交互性能提高,减少服务器负载,大大提升系统性能。手机推送服务要求手机和服务器建立一条链路,当有消息需要发送到手机时,通过此链路发送即可。
  苹果APNs(Apple Push Notification Service)的流程如下:1、应用程序注册消息推送。2、iOS从苹果推送服务器(APNs)获取device token(设备令牌,用于标识设备,类似身份证),应用程序接收device token。3、应用程序将device token发送给第三方Push服务端程序。4、服务端程序向APNS服务发送消息。5、APNS服务将消息发送给iPhone应用程序。Android的推送服务原理大体相同。
  推送技术的应用方向比较广泛,主要有两类:广告推送、SNS信息推送。前者给目前有一定安装量但没有盈利模式的手机应用开发者带来了一定希望,但要注意推送的频度和内容选中,不然会因为推送的东西用户不感兴趣造成打扰。SNS信息推送主要用于QQ空间、人人网、微博和天涯论坛等web2.0社区网站推送好友的留言等,可以用来提升用户黏性。
  推送实现方式:Google的GCM由于国内没有服务器、需要用户绑定Google账号还有国情等大家都懂的原因,基本不能用。而像XMPP协议和IBM发布的MQTT协议都过于复杂,部署成本也较高。XMPP协议比较费电费流量,这个对当前智能机的消耗太大。而MQTT协议虽然比较省电省流量,但还不够成熟。还有一些第三方的推送服务,在客户端嵌入中间件,诸如国外的pubnub,国内的蝴蝶,个信互动的“个推”。
  pubnub免费版每天可以免费发送5000条消息,对个人开发者应该够用,但每条消息不能超过1800字节,所以只能传送一些小数据。而且服务在国外(活在天朝真无奈)随时有被qiang的风险。蝴蝶给机锋网做了推送,还有它自己的尚邮客户端。个推在国内接过几家较大的案子(貌似新浪微博就是用的它们的服务),和pubnub一样每月可以免费推送一定数量,对于收费版的收费标准还不太清楚。
  对于个人开发者,用户量不大的可以自己开发或者用pubnub(不过有被qiang风险)。用户量在5万以上甚至百万千万级别,建议还是用第三方的服务。因为用户规模的不同,推送系统的复杂度将成几何级数增长。
  我对国内外这几家的推送服务都用了下,但国外的考虑到实用性了解不深,要是对推送感兴趣的,可以一起交流下。这是我的联系方式:
  周晨,QQ:514359876