1
雷鋒網(wǎng)按:本文作者@Tiger_張虎, 云巴 (yunba.io) 創(chuàng)始人,yunba.io 云端實(shí)時(shí)消息服務(wù)。 JPush 創(chuàng)始人,原CTO。 Oracle VM 創(chuàng)始團(tuán)隊(duì)成員。雷鋒網(wǎng)已獲授權(quán)。
2010 年左右,Android 手機(jī)在國內(nèi)迅速發(fā)展,Google 的原生推送(C2DM,現(xiàn)在的 GCM)由于種種原因不能正常使用,當(dāng)時(shí)的 Android 開發(fā)者使用各種辦法來解決這個(gè)問題,其中就包括 Android 手機(jī)廠商開發(fā)出自己的推送方案。
對于大部分開發(fā)者來說,除了做一個(gè) App,還要獨(dú)立開發(fā)一套推送系統(tǒng)是件異常困難的事情。哪怕是用戶數(shù)量很大的 App ,這也不是一件容易的事情。于是在 2011 年底,我產(chǎn)生了做獨(dú)立第三方推送服務(wù)的想法,也就有了后來的極光推送。
這幾年經(jīng)常有業(yè)內(nèi)的朋友探討推送能否送達(dá)的關(guān)鍵因素。其實(shí)最重要的是 SDK 能否?;?。
具體地說,有以下兩方面:
1. SDK 如果不能及時(shí)地發(fā)起心跳,運(yùn)營商網(wǎng)絡(luò)的長連接會(huì)被斷開。
2. SDK 的任務(wù)如果被殺掉了,不能被拉起,消息就完全沒有機(jī)會(huì)下發(fā)。
參考之前的文章:《推送技術(shù)原理:移動(dòng)無線網(wǎng)絡(luò)長連接》
如果 SDK 端不能有效地?;?,那么無論服務(wù)器端怎么優(yōu)化,都不能保證消息及時(shí)地送達(dá)。
對 Android 手機(jī)廠商來說,這里有一個(gè)矛盾的問題。對于各個(gè) App 的推送達(dá)到的效果來說是好事,但這樣做一定程度上破壞了Android系統(tǒng)的生態(tài),增加了功耗,也違背了系統(tǒng)清理后臺設(shè)計(jì)的初衷。手機(jī)廠商都希望自己出產(chǎn)的手機(jī)能有盡量長的待機(jī)時(shí)間,但是 App 定時(shí)在后臺啟動(dòng)、維持心跳的行為,會(huì)極大地影響手機(jī)待機(jī)時(shí)間。
因此,最近幾年,手機(jī)廠商為了控制后臺服務(wù),持續(xù)地推出各種限制手段。比如之前的心跳對齊,也就是不允許 App 任意使用 RTC 后臺喚醒手機(jī)。還有更嚴(yán)厲的手段,就是定時(shí)清理所有后臺服務(wù),并且不允許服務(wù)通過監(jiān)聽廣播自動(dòng)拉起。
正如前文所提到的,最近主流的 Android 手機(jī)都會(huì)清理后臺服務(wù),禁止服務(wù)自動(dòng)拉起,以前第三方推送服務(wù)商的各種 SDK 保活手段相繼失效,這個(gè)問題從根本上動(dòng)搖了 Android 第三方推送服務(wù)的基礎(chǔ),導(dǎo)致幾乎所有的 Android 第三方推送服務(wù)都不能保證送達(dá)。
面對這樣的問題,App 開發(fā)者該如何應(yīng)對?
因?yàn)橥扑头?wù)的特點(diǎn),它最應(yīng)該以系統(tǒng)原生服務(wù)的形態(tài)存在。在 iOS/Android 系統(tǒng)推出的早期,都考慮到了這個(gè)問題,iOS 有 APNs,Android 有 C2DM(GCM)??上У氖牵珹ndroid 的 GCM 在國內(nèi)早已不能被有效使用,而 Android 方面沒有試圖解決這個(gè)問題,而把問題留給了手機(jī)廠商和 App 開發(fā)者。
考慮到推送服務(wù)的特點(diǎn),我們自然而然就想到了通過廠商的推送通道來解決這個(gè)問題,就像在 iOS 上使用 APNs 一樣。使用 App 內(nèi)的消息通道發(fā)消息給 App,再通過廠商的推送通道喚醒 App,App 被打開后,接受消息通道的離線消息。
從目前的實(shí)踐情況來看,這是解決后臺進(jìn)程被清理的最有效辦法。
目前國內(nèi)幾個(gè)主要的 Android 廠商中,小米、華為 都有提供官方的推送服務(wù)。經(jīng)過我們團(tuán)隊(duì)的驗(yàn)證,他們的推送服務(wù)在自己品牌的手機(jī)上,有相對穩(wěn)定的送達(dá)率。目前表現(xiàn)最好的是小米,華為的推送延遲有時(shí)比較大,也不太穩(wěn)定。
而另外的幾家 OPPO、VIVO、金立 都沒有官方的推送服務(wù)。
云巴近期推出了一鍵集成 小米、華為 推送的功能,方便開發(fā)者快速集成廠商的推送服務(wù)。但是對于沒有提供推送服務(wù)的廠商,目前還沒有特別好的辦法。我們期待各主流手機(jī)廠商為了 App 有更好的體驗(yàn),都能提供解決這個(gè)問題的方案。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。