第一篇文章我們先來聊聊“Android我還可以相信你多少”,在Android系統(tǒng)版本的碎片化之下恩商,在國內(nèi)百家爭鳴的廠家定制rom修改之下,作為一個開發(fā)者在選用系統(tǒng)組件的時候應該如何抉擇羊初?
每當想起這個話題的時候啸盏,總是略帶一些沮喪。系統(tǒng)的組件都不靠譜耿导,倒逼著開發(fā)者重復造輪子声怔,浪費時間是其一,良莠不齊的實現(xiàn)和激烈的資源競爭都是導致Android平臺App質(zhì)量不高的原因之一舱呻。不過這倒催生了一系列優(yōu)秀的開源項目醋火,只要你想得到基本上都可以在開源平臺上面搜得到。
首當其沖的應該算推送箱吕。推送作為拉回流失芥驳,提高活躍的重要手段基本上每個App都是標配。但無奈GCM依賴google服務框架茬高,國內(nèi)手機系統(tǒng)基本都被閹割兆旬,直接導致官方系統(tǒng)級推送服務撲街。于是演變出了很多變種怎栽,每個廠家自研一套丽猬,比如小米,華為都是對外公開熏瞄。有的廠家是有自建推送到未普及到普通應用開發(fā)者脚祟,比如
oppo,vivo强饮。小眾一點廠家可能都還沒有實現(xiàn)由桌。除了廠家實現(xiàn)的系統(tǒng)級推送,也有很多第三方軟件公司實現(xiàn)的方案,比如個推行您,極光铭乾。甚至還有像友盟這種的打包方案:會根據(jù)手機品牌來進行適配優(yōu)先選擇系統(tǒng)級推送,并以其他推送作為輔助來提高消息到達率邑雅。這種做法在實現(xiàn)推送服務的時候很常見片橡,很多App都會接入不止一個推送SDK妈经,所做的一切就是為了盡可能的提高消息到達率淮野。
除了推送,定時輪詢也算是另外一種解決方案吹泡,適合實時性要去不高接入推送成本又偏高的應用
事實上因為沒有統(tǒng)一的推送平臺骤星,只靠接入一家推送服務都無法在現(xiàn)在的國內(nèi)環(huán)境下面保證到達率。隨著廠家對功耗限制的越來越嚴格爆哑,程序在后臺存活的概率越來越小洞难,要是利用不了系統(tǒng)級推送服務被殺之后基本沒有機會。于是乎又衍生出了另外一種喚醒服務揭朝,也即接入某種推送平臺的SDK之后队贱,一個程序啟動了就會拉起另外一個程序運行,這樣即使沒有系統(tǒng)級服務也可以繼續(xù)收發(fā)消息潭袱。但道高一尺魔高一丈柱嫌,廠家發(fā)現(xiàn)這種行為后紛紛亮出大招,比如禁止使用startService喚起一個死掉的程序屯换,同時還在通知欄來個提醒:已禁止A程序后臺啟動B程序编丘。開發(fā)者被逼上了絕路。關于喚醒還有另外一種變種彤悔,就是消息通道復用嘉抓,也即A程序起來之后也可以代收同樣使用這個推送平臺的其他程序,這樣就不存在喚醒但同時可以收發(fā)更多程序消息晕窑。這種實現(xiàn)系統(tǒng)很難禁止抑片,唯一的缺點就是流量功耗都會算到A程序上面,或許推送開發(fā)者又要進行一輪修改了杨赤。
一個App保持了很多條長鏈接敞斋,App之間反復被喚醒,輪詢頻率過快都是導致手機變卡望拖,耗電嚴重的重要原因渺尘。
推送服務選擇的原則最重要的就是要選有系統(tǒng)級推送且市場占有率大的廠家。根據(jù)我們的經(jīng)驗同時接入小米和華為说敏,在華為手機上面走華為推送鸥跟,在其他手機上面走小米推送。oppo,vivo市場占有率很高医咨,但無奈推送服務還不成熟枫匾,據(jù)小道消息還要在通知欄上面做競價排名?小米推送比較成熟拟淮,服務器也比較穩(wěn)定干茉,接入也很簡單,華為推送因為某些舊版本系統(tǒng)存在bug導致到達率會有一些損失很泊。個推據(jù)說留有后門可以動態(tài)執(zhí)行角虫。在推送實現(xiàn)上面也可以采用幾個推送平臺服務端同時下發(fā),客戶端進行過濾去重的實現(xiàn)委造〈炼欤可以根據(jù)自己需要來進行選擇。
還要警惕的是昏兆,接入推送之后有可能存在消息延遲枫虏,這完全依賴于推送服務提供商的后臺服務。消息從我們服務器發(fā)到推送平臺之后進入處理隊列爬虱,最后真正推到客戶端的時間是不確定的隶债,所以客戶端要盡量有延遲容忍能力。話說回來跑筝,除了個別推送(比如個推)死讹,其他都是免費提供服務,你還能要求咋樣继蜡?
更多推送平臺的對比網(wǎng)上也有很多參考文章回俐,大家可以搜索:android推送對比 進行查看,這里有篇對比文章可供參考:http://www.reibang.com/p/d650...
更多文章請關注微信公眾號:anzhuozhimei