本文寫(xiě)于2017年5月2日,隨著技術(shù)演進(jìn)可能有不準(zhǔn)確的情況,歡迎指正。
現(xiàn)狀
鑒于國(guó)內(nèi)Android開(kāi)發(fā)的生態(tài)環(huán)境,國(guó)產(chǎn) ROM 無(wú)法使用 GCM 推送,就催生了很多推送方案來(lái)替代GCM,目前的推送方案按照推送通道可以簡(jiǎn)單劃分為三種:
系統(tǒng)級(jí)推送
- 特征:系統(tǒng)級(jí)長(zhǎng)連接,實(shí)現(xiàn)方式類(lèi)似于IOS 平臺(tái) APNS。
- 廠商:有能力控制上游ROM的廠商,在系統(tǒng)中內(nèi)置自己的推送服務(wù)通道,如 Google GCM、小米推送、華為推送 等
- 優(yōu)點(diǎn):使用系統(tǒng)服務(wù),省電,可靠,成功率高,app被完全殺死后仍能收到推送。
- 缺點(diǎn):Android 平臺(tái)碎片化問(wèn)題,各家的服務(wù)通道不能通用,GCM 只能在有完整Google 服務(wù)框架的手機(jī)上使用,其他類(lèi)似。
三方推送
- 特征:app級(jí)長(zhǎng)連接通道。標(biāo)配:由系統(tǒng)事件廣播?;钸M(jìn)程。pro:獨(dú)立進(jìn)程,共用長(zhǎng)連接,鏈?zhǔn)絾拘训取?/li>
- 廠商:提供推送及增值服務(wù),如友盟推送、個(gè)推、騰訊信鴿、百度云推送等
- 優(yōu)點(diǎn):通用性較強(qiáng),各種ROM上都能用,app在活動(dòng)時(shí)成功率與系統(tǒng)級(jí)推送相當(dāng)。
- 缺點(diǎn):app被殺死后成功率較低,這點(diǎn)在國(guó)產(chǎn)ROM上尤為明顯。進(jìn)程?;睢㈡?zhǔn)絾拘褧?huì)導(dǎo)致耗電量增加。進(jìn)程?;詈蛦拘褭C(jī)制受限于系統(tǒng)及各種優(yōu)化軟件。
混合推送
- 特征:同時(shí)包含系統(tǒng)級(jí)長(zhǎng)連接通道和 app 級(jí)長(zhǎng)連接通道
- 廠商:小米推送,阿里云推送,LeanCloud Push,極光推送等。
- 優(yōu)點(diǎn):適應(yīng)性比純系統(tǒng)級(jí)推送強(qiáng),成功率相對(duì)純?nèi)酵扑洼^高
- 缺點(diǎn):除小米推送外,其他推送方式都是以膠水的方式捆綁了系統(tǒng)級(jí)推送和自家三方推送(類(lèi)似于友盟分享),開(kāi)發(fā)成本相對(duì)稍高。
三方推送采用的進(jìn)程?;钜约版?zhǔn)絾拘鸭夹g(shù),流不流氓暫且不表,但一直是國(guó)內(nèi) ROM 廠商和系統(tǒng)優(yōu)化軟件嚴(yán)打的對(duì)象。
三方推送廠商所謂的 “需要把應(yīng)用加到【自啟動(dòng)管理】列表”等設(shè)置, 站在用戶(hù)的角度顯然是不現(xiàn)實(shí)的。
隨著 Android 系統(tǒng)版本迭代過(guò)程中對(duì)系統(tǒng)權(quán)限控制的收緊,以及ROM廠商的省電策略,單一的三方推送成功率只能用慘不忍睹來(lái)形容。
為了提高成功率,使用多通道推送是一種必要卻又無(wú)奈的做法。
推送效果簡(jiǎn)單對(duì)比
首先要了解一些推送的基本條件。
通知與透?jìng)飨?/h6>
- 在系統(tǒng)級(jí)推送中,通知交給相應(yīng)的PushSDK處理,透?jìng)饔晌覀冏约篈pp處理。
- 透?jìng)飨⒖梢宰远x消息內(nèi)容,擁有更大的靈活度;通知消息格式較為死板固定。
- 根本區(qū)別在于通知消息走的是系統(tǒng)公用通道,透?jìng)飨⒆叩氖莂pp私有通道;對(duì)于小米推送、華為推送來(lái)說(shuō),只有采用通知消息,到達(dá)率才有保證,透?jìng)飨?,與三方推送并沒(méi)有什么區(qū)別。
- 在三方推送中,其提供的通知和透?jìng)飨⒆叩亩际莂pp級(jí)通道。
app 運(yùn)行狀態(tài)
- app 運(yùn)行時(shí)在網(wǎng)絡(luò)正常的情況下,各家推送服務(wù)送達(dá)效果相當(dāng),只是延遲有差異
- app 被殺死后,系統(tǒng)級(jí)推送在對(duì)應(yīng)平臺(tái)有著天然的優(yōu)勢(shì),但僅限于通知類(lèi)型的消息。透?jìng)飨⑴c三方推送的結(jié)果類(lèi)似,在國(guó)產(chǎn)ROM上直接“陣亡”了。
下面主要對(duì)比App被殺死后發(fā)推送的測(cè)試結(jié)果:
測(cè)試機(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不能收到 - 未測(cè)試
通知消息:
| 推送方式 | 原生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 | - |
透?jìng)飨ⅲ?/h6>
| 推送方式 | 原生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)下仍能收到通知消息,透?jìng)飨⒔邮帐?br> 僅支持 EMUI 5.0以上版本,低版本和其他ROM 創(chuàng)建連接失敗,完全不能使用。小米推送
app被殺死后在MIUI系統(tǒng)下仍能收到通知消息,透?jìng)飨⒔邮帐?br> 非MIUI系統(tǒng)下,小米推送可以使用app級(jí)通道,此時(shí)與三方推送類(lèi)似
相對(duì)而言,小米推送的完成度更高,在系統(tǒng)推送的基礎(chǔ)上實(shí)現(xiàn)了三方通道,兼容了非 MIUI 的 Android 機(jī),而且有 IOS 平臺(tái)的SDK,在一定程度上可以替代三方推送。華為推送僅支持自家EMUI 5.0以上系統(tǒng)。
結(jié)論:
- 如果是從零開(kāi)開(kāi)始開(kāi)發(fā),只接入小米推送,就可以覆蓋到大部分 Android 機(jī)型,并且可以在 MIUI 上獲得加成。
- 如果追求高送達(dá)率,可以采用目前已知的“捆綁”混合推送方案例如:阿里云推送,極光推送等。
- 如果項(xiàng)目中已經(jīng)接入了三方推送而效果又不理想,可以考慮單獨(dú)接入小米、華為等平臺(tái)的 SDK 來(lái)提高在國(guó)產(chǎn) ROM 上的送達(dá)率,需要自行處理數(shù)據(jù)整合的問(wèn)題。
混合推送參考文檔
阿里云推送 費(fèi)用參考 :目前支持小米和華為
LeanCloudPush 費(fèi)用參考 :目前支持華為和魅族,暫不支持小米
極光推送 : 目前支持小米、華為和魅族
小米推送
關(guān)于推送方案,可以參考另外兩篇文章:
集成第三方推送最佳實(shí)踐
Android端外推送到底有多煩?
推送 從入門(mén)到放棄