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試試,給出個可行性報告。