1、Android Push功能现状javascript
Push可以有效地激活用户更多地使用 App,目前大多数应用都有Push功能。html
Push功能依赖于Push服务,如今主流的智能手机操做系统都集成了免费的Push服务,如IPhone的APNS(Apple Push Notification service)、windowsphone的MPNS(Microsoft Push Notification service,Android的GCM (GoogleCloud Messaging)。java
可是因为Android操做系统是开源的,不少手机厂商都没有预装Google服务,而且Google服务在国内不稳定,因此国内没法使用GCM实现Push功能,这种状况下咱们只能使用第三方的Push服务或本身开发Push服务。node
开发及时的Push服务首先要考虑到性能、并发量、安全性等因素,它是一个很复杂的系统,固然若是App活跃用户数不多,也能够下降复杂性。android
国内应用开发商大多本身部署一个简单的Http服务,客户端每隔一段时间到服务器查询,这种方式的缺点也是显而易见的web
Ø HTTP请求的数据包较大,会增长数据流量数据库
Ø 不够及时,若是轮询的时间间隔过短就会很耗电、耗流量json
2、第三方Push服务介绍windows
因为上述一些缘由,不少的第三方Push服务应运而生,服务提供商大多数是国外的安全
一、 Urban Airship
Urban Airship是业界最知名的一个提供推送服务的平台,每个月的推送数量达到5.2亿次,平均每分钟的信息发送量约为1.3万次。
除了基本推送服务外,UrbanAirship还提供Rich Push:让Push信息能够带HTML、视频、音频等多媒体信息。此外,UrbanAirship还为iOS和Android提供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/
有网友说只要每个月推送量小于一百万条就免费,在官网没有找到,估计这是之前的政策
技术支持:
官方提供客户端和Server的SDK,很方便调用,而且有完善的文档
二、 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
三、 Pubnub
pubnub是一个云端即时消息服务,经过它咱们能够很方便地建立本身的即时应用。
支持的平台:
因为是跨平台的,因此支持全部平台
收费标准:
25 $/月包含天天2500活跃用户
而后每发送1百万条消息须要额外支付1$,每增长1000个活跃用户需额外支付10$
不足:
支持http和websocket(长链接,可是数据是经过http协议传输的)协议,因为java没有Websocket协议,因此是使用Http协议轮询,固然也能够用Socket模拟Websocket。
官方提供的androidSDK是使用Http协议,javascript SDK使用WebSocket协议。
另外,pubnub的每条消息限制在1800字节
四、 极光推送
极光推送是国产的一个免费的推送服务,架构很是相似Urban Airship,不少后台网页和操做也基本上和Urban Airship同样。
支持的平台:
Ø Android
Ø IOS
收费标准:
免费
技术支持:
提供sdk和开发文档
不足:
因为刚上线,性能、并发量、安全性等方面还未知,并且没有承诺永久免费,因此仍是有风险的
官方网站:http://jpush.cn/index.jsp
3、自主开发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,用于监听app的push请求
》打开nodeServer,自动链接并登陆到server,而后自动监听client链接
》打开client,自动建立10000个到nodeServer的链接
》打开app,自动向server发送多条push,而后push下发到nodeServer,最后分发到各client
4、总结
Urban Airship和极光推送这两个第三方推送服务平台是各方面相对比较好的,以咱们目前的活跃用户量来看,若是使用Urban Airship,每个月大概须要支付199$,我以为也能够承受,若是使用极光推送,则须要承担风险。
或者咱们也能够尝试自主开发一个Push服务,如今咱们的活跃用户量较少,性能和并发量方面能够下降一些标准,这样既能够解决咱们面临的问题,也能够锻炼咱们的能力。
发件人: Jin ZhengBao(金正宝)
发送时间: 2012年10月30日 14:08
收件人: Zhao LeiYong(赵雷勇)
抄送: Chen Meng(陈孟); Shan PengFei(单鹏飞); Ning Chao(宁超)
主题: 第三方推送服务调研
雷勇
参考如下文章。调研下第三方推送服务(国内外的)。仔细看看文档。写个demo试试,给出个可行性报告。