本文寫于2017年5月2日,隨著技術(shù)演進(jìn)可能有不準(zhǔn)確的情況仪媒,歡迎指正姜钳。
現(xiàn)狀
鑒于國內(nèi)Android開發(fā)的生態(tài)環(huán)境,國產(chǎn) ROM 無法使用 GCM 推送领迈,就催生了很多推送方案來替代GCM彻磁,目前的推送方案按照推送通道可以簡單劃分為三種:
系統(tǒng)級推送
- 特征:系統(tǒng)級長連接,實(shí)現(xiàn)方式類似于IOS 平臺 APNS狸捅。
- 廠商:有能力控制上游ROM的廠商衷蜓,在系統(tǒng)中內(nèi)置自己的推送服務(wù)通道,如 Google GCM尘喝、小米推送磁浇、華為推送 等
- 優(yōu)點(diǎn):使用系統(tǒng)服務(wù),省電朽褪,可靠置吓,成功率高,app被完全殺死后仍能收到推送鞍匾。
- 缺點(diǎn):Android 平臺碎片化問題交洗,各家的服務(wù)通道不能通用,GCM 只能在有完整Google 服務(wù)框架的手機(jī)上使用橡淑,其他類似构拳。
三方推送
- 特征:app級長連接通道。標(biāo)配:由系統(tǒng)事件廣播绷禾模活進(jìn)程置森。pro:獨(dú)立進(jìn)程,共用長連接符糊,鏈?zhǔn)絾拘训取?/li>
- 廠商:提供推送及增值服務(wù)凫海,如友盟推送、個推男娄、騰訊信鴿行贪、百度云推送等
- 優(yōu)點(diǎn):通用性較強(qiáng),各種ROM上都能用模闲,app在活動時成功率與系統(tǒng)級推送相當(dāng)建瘫。
- 缺點(diǎn):app被殺死后成功率較低,這點(diǎn)在國產(chǎn)ROM上尤為明顯尸折。進(jìn)程眴牛活、鏈?zhǔn)絾拘褧?dǎo)致耗電量增加实夹。進(jìn)程遍吓ǎ活和喚醒機(jī)制受限于系統(tǒng)及各種優(yōu)化軟件粒梦。
混合推送
- 特征:同時包含系統(tǒng)級長連接通道和 app 級長連接通道
- 廠商:小米推送,阿里云推送荸实,LeanCloud Push匀们,極光推送等。
- 優(yōu)點(diǎn):適應(yīng)性比純系統(tǒng)級推送強(qiáng)泪勒,成功率相對純?nèi)酵扑洼^高
- 缺點(diǎn):除小米推送外昼蛀,其他推送方式都是以膠水的方式捆綁了系統(tǒng)級推送和自家三方推送(類似于友盟分享)宴猾,開發(fā)成本相對稍高圆存。
三方推送采用的進(jìn)程保活以及鏈?zhǔn)絾拘鸭夹g(shù)仇哆,流不流氓暫且不表沦辙,但一直是國內(nèi) ROM 廠商和系統(tǒng)優(yōu)化軟件嚴(yán)打的對象。
三方推送廠商所謂的 “需要把應(yīng)用加到【自啟動管理】列表”等設(shè)置讹剔, 站在用戶的角度顯然是不現(xiàn)實(shí)的油讯。
隨著 Android 系統(tǒng)版本迭代過程中對系統(tǒng)權(quán)限控制的收緊,以及ROM廠商的省電策略延欠,單一的三方推送成功率只能用慘不忍睹來形容陌兑。
為了提高成功率,使用多通道推送是一種必要卻又無奈的做法由捎。
推送效果簡單對比
首先要了解一些推送的基本條件兔综。
通知與透傳消息
- 在系統(tǒng)級推送中,通知交給相應(yīng)的PushSDK處理狞玛,透傳由我們自己App處理软驰。
- 透傳消息可以自定義消息內(nèi)容,擁有更大的靈活度心肪;通知消息格式較為死板固定锭亏。
- 根本區(qū)別在于通知消息走的是系統(tǒng)公用通道,透傳消息走的是app私有通道硬鞍;對于小米推送慧瘤、華為推送來說,只有采用通知消息固该,到達(dá)率才有保證锅减,透傳消息,與三方推送并沒有什么區(qū)別蹬音。
- 在三方推送中上煤,其提供的通知和透傳消息走的都是app級通道。
app 運(yùn)行狀態(tài)
- app 運(yùn)行時在網(wǎng)絡(luò)正常的情況下著淆,各家推送服務(wù)送達(dá)效果相當(dāng)劫狠,只是延遲有差異
- app 被殺死后拴疤,系統(tǒng)級推送在對應(yīng)平臺有著天然的優(yōu)勢,但僅限于通知類型的消息独泞。透傳消息與三方推送的結(jié)果類似呐矾,在國產(chǎn)ROM上直接“陣亡”了。
下面主要對比App被殺死后發(fā)推送的測試結(jié)果:
測試機(jī)型:
- Nexus5 Android 6.0.1
- 一加3T 刷MIUI v8 (基于Android 6.0.1)
- 小米note MIUI v7 (基于Android 4.4)
- 華為 Mate9 EMUI5.0 (基于Android 7.0)
- 華為 Mate7 (基于Android 4.4)
√ 收到 x不能收到 - 未測試
通知消息:
推送方式 | 原生Android | MIUI v8 | MIUI v7 | EMUI 5.0 | EMUI 3.0 |
---|---|---|---|---|---|
Google GCM | √ | x | x | x | x |
小米推送 | √ | √ | √ | x | - |
華為推送 | x | x | x | √ | x |
LeanCloud Push | √ | x | x | x | - |
透傳消息:
推送方式 | 原生Android | MIUI v8 | MIUI v7 | EMUI 5.0 | EMUI 3.0 |
---|---|---|---|---|---|
Google GCM | √ | x | x | x | x |
小米推送 | √ | x | x | x | - |
華為推送 | x | x | x | x | x |
LeanCloud Push | √ | x | x | x | - |
華為推送
app被殺死后在EMUI 5.0 系統(tǒng)下仍能收到通知消息懦砂,透傳消息接收失敗
僅支持 EMUI 5.0以上版本蜒犯,低版本和其他ROM 創(chuàng)建連接失敗,完全不能使用荞膘。小米推送
app被殺死后在MIUI系統(tǒng)下仍能收到通知消息罚随,透傳消息接收失敗
非MIUI系統(tǒng)下,小米推送可以使用app級通道羽资,此時與三方推送類似
相對而言淘菩,小米推送的完成度更高,在系統(tǒng)推送的基礎(chǔ)上實(shí)現(xiàn)了三方通道屠升,兼容了非 MIUI 的 Android 機(jī)潮改,而且有 IOS 平臺的SDK,在一定程度上可以替代三方推送腹暖。華為推送僅支持自家EMUI 5.0以上系統(tǒng)汇在。
結(jié)論:
- 如果是從零開開始開發(fā),只接入小米推送脏答,就可以覆蓋到大部分 Android 機(jī)型糕殉,并且可以在 MIUI 上獲得加成。
- 如果追求高送達(dá)率以蕴,可以采用目前已知的“捆綁”混合推送方案例如:阿里云推送糙麦,極光推送等。
- 如果項(xiàng)目中已經(jīng)接入了三方推送而效果又不理想丛肮,可以考慮單獨(dú)接入小米赡磅、華為等平臺的 SDK 來提高在國產(chǎn) ROM 上的送達(dá)率,需要自行處理數(shù)據(jù)整合的問題宝与。
混合推送參考文檔
阿里云推送 費(fèi)用參考 :目前支持小米和華為
LeanCloudPush 費(fèi)用參考 :目前支持華為和魅族焚廊,暫不支持小米
極光推送 : 目前支持小米、華為和魅族
小米推送
關(guān)于推送方案习劫,可以參考另外兩篇文章:
集成第三方推送最佳實(shí)踐
Android端外推送到底有多煩咆瘟?
推送 從入門到放棄