客户端推送服务

一、Android Push功能现状

Push能够有效地激活用户更多地使用 App,目前大多数应用都有Push功能。

Push功能依赖于Push服务,现在主流的智能手机操作系统都集成了免费的Push服务,如IPhoneAPNS(Apple Push Notification service)windowsphoneMPNS(Microsoft Push Notification serviceAndroidGCM (GoogleCloud Messaging)

但是由于Android操作系统是开源的,很多手机厂商都没有预装Google服务,并且Google服务在国内不稳定,所以国内无法使用GCM实现Push功能,这种情况下我们只能使用第三方的Push服务或自己开发Push服务。

开发及时的Push服务首先要考虑到性能、并发量、安全性等因素,它是一个很复杂的系统,当然如果App活跃用户数很少,也可以降低复杂性。

国内应用开发商大多自己部署一个简单的Http服务,客户端每隔一段时间到服务器查询,这种方式的缺点也是显而易见的

Ø  HTTP请求的数据包较大,会增加数据流量

Ø  不够及时,如果轮询的时间间隔太短就会很耗电、耗流量

二、第三方Push服务介绍

由于上述一些原因,很多的第三方Push服务应运而生,服务提供商大多数是国外的

1、 Urban Airship

Urban Airship是业界最知名的一个提供推送服务的平台,每月的推送数量达到5.2亿次,平均每分钟的信息发送量约为1.3万次。

除了基本推送服务外,UrbanAirship还提供Rich Push:让Push信息可以带HTML、视频、音频等多媒体信息。此外,UrbanAirship还为iOSAndroid提供In-App Purchase(IAP)服务,帮助开发者处理内容存放和安全支付等问题。Urban Airship提供了一个管理后台。开发者在这里不仅能用信息编辑界面来发送Push,还可以监测Push消息的传达情况,观察用户是否产生了交互等统计信息。

 

推送服务支持以下三个平台:

Ø  IOS

Ø  Android

Ø  BlackBerry

 

收费标准(按月活跃用户数计费):

0 to10,000users              $199

10,001to 25,000 users     $499

25,001to 50,000 users     $999

50,001to 75,000 users     $1,499

75,001to 100,000 users  $1,999

活跃用户数超过100,000,按0.24$计费

详细的收费标准请参考:http://urbanairship.com/pricing/

有网友说只要每月推送量小于一百万条就免费,在官网没有找到,估计这是以前的政策

 

技术支持

官方提供客户端和ServerSDK,很方便调用,并且有完善的文档

 

官方网站:http://urbanairship.com/

2、 push.io

push.io也是一个很出名的推送服务平台,已经成功推送了60亿次通知,当然和Urban Airship比还差一大截。

 

支持以下平台:

Ø  iOS

Ø  Android

Ø  Windows Phone

Ø  Nokia Ovi and S40

 

收费标准:

0.01$/活跃用户/

250k users享受12.5%的优惠

500k users 享受25%的优惠

超过1百万users享受50%的优惠

具体收费标准请参考:http://push.io/pricing/

 

技术支持:

提供SDK和文档

 

不足:

Android SDK使用GCM服务实现的,所以不适合我们使用

 

官方网站:http://push.io

3、 Pubnub

pubnub是一个云端即时消息服务,通过它我们可以很方便地创建自己的即时应用。

 

支持的平台:

由于是跨平台的,所以支持所有平台

 

收费标准:

25 $/包含每天2500活跃用户

然后每发送1百万条消息需要额外支付1$,每增加1000个活跃用户需额外支付10$

 

不足:

支持httpwebsocket(长连接,但是数据是通过http协议传输的)协议,由于java没有Websocket协议,所以是使用Http协议轮询,当然也可以用Socket模拟Websocket

官方提供的androidSDK是使用Http协议,javascript SDK使用WebSocket协议。

另外,pubnub的每条消息限制在1800字节

 

官方网站:http://www.pubnub.com/

4、 极光推送

极光推送是国产的一个免费的推送服务,架构非常类似Urban Airship,很多后台网页和操作也基本上和Urban Airship一样。

 

支持的平台:

Ø  Android

Ø  IOS

 

收费标准:

免费

 

技术支持:

提供sdk和开发文档

 

不足:

由于刚上线,性能、并发量、安全性等方面还未知,而且没有承诺永久免费,所以还是有风险的

 

官方网站:http://jpush.cn/index.jsp

三、自主开发push服务

Push服务是一个很复杂的系统,要考虑到性能、并发量、安全性等因素,这些都是技术上的难题,我们需要慢慢摸索、积累。

我们可以参考上述几个服务平台,看看他们是怎么做的

 

设计角度:

Ø  支持多应用,每个应用分配唯一appKey

Ø  支持多平台

Ø  支持发送到所有设备

Ø  支持发送到指定设备

Ø  支持按时间段发送

Ø  及时推送

Ø  统计推送规律

 

技术角度:

Ø  使用socket长连接,消息能够及时达到

Ø  优化协议,减少数据包大小

Ø  一般使用json数据格式

 

流程:

Ø  生成设备唯一ID

Ø  注册到pushserver

Ø  等待消息

Ø  收到消息

Ø  弹出通知

 

个人对服务器架构的想法:

首先服务器应该是分布式的、可扩展的,其中一个服务作为总服务,然后架设多个子服务器,终端设备需要先连接到总服务拿到需要连接的子服务器地址,然后再连接到具体的子服务器,总服务用于接收各app运营后台提交的push请求,然后通过子服务器分发到每个终端设备。

流程:

服务器之间的交互:

》架设总服务

》架设子服务

》子服务连接并登录到总服务

》定时向总服务报告连接情况

客户端登录过程:

》连接到总服务并获取子服务器地址

》连接并登录到子服务

》到数据库查询有没有发往此客户端的push

》如果有就发送,发送成功后删除

运营后台发送push过程:

》运营后台向总服务发送push数据

》总服务把数据保存到数据库

》然后把此push下发到子服务

》子服务在连接池里查找有没有发送对象

》发送到对应的客户端并删除数据库里对应的数据

 

附件是我用node.js写的一个demo,完全按照上面的架构写的,一个有四个模块,server:总服务,nodeServer:子服务,client:客户端,app:运营后台

使用方法:

需要先安装node.js环境(http://nodejs.org),安装完成后在cmd里输入命令:nodepath\fileName.js

》打开server,自动开始监听nodeServer的连接

》然后自动开启一个httpServer,用于监听apppush请求

》打开nodeServer,自动连接并登录到server,然后自动监听client连接

》打开client,自动创建10000个到nodeServer的连接

》打开app,自动向server发送多条push,然后push下发到nodeServer,最后分发到各client

四、总结

Urban Airship和极光推送这两个第三方推送服务平台是各方面相对比较好的,以我们目前的活跃用户量来看,如果使用Urban Airship,每月大概需要支付199$,我觉得也可以承受,如果使用极光推送,则需要承担风险。

或者我们也可以尝试自主开发一个Push服务,现在我们的活跃用户量较少,性能和并发量方面可以降低一些标准,这样既可以解决我们面临的问题,也可以锻炼我们的能力。

 

发件人: Jin ZhengBao(金正宝)
发送时间: 2012年10月30日 14:08
收件人: Zhao LeiYong(赵雷勇)
抄送: Chen Meng(陈孟); Shan PengFei(单鹏飞); Ning Chao(宁超)
主题: 第三方推送服务调研

 

雷勇 

 

参考以下文章。调研下第三方推送服务(国内外的)。仔细看看文档。写个demo试试,给出个可行性报告。

 

 

http://news.eoe.cn/industry/2012/1026/5913.html

 

 

 

 

你可能感兴趣的:(客户端推送服务)