安卓app接入推送的較優解決方案(包括廠商通道、集成推送的使用分析)

    推送功能,是每一個app都會開發的功能,它可以很大程度的提高app的使用率和用戶的保活率。但是問題來了,由於現在安卓系統越來越成熟,對某些權限的限制越來越大,而且各大廠商的定製系統對後臺app監控做得也越來越好,如果自己實現一條後臺線程來和後臺服務器保持長連接,基本前臺app退出不到幾分鐘就被殺死了,所以我選擇通過接入第三方的推送SDK來實現推送功能的實現。
    在給公司產品接入推送時,我實現了兩種方案,原因下面會解釋,第一種方案就是自己集成了目前系統已經開放的廠商通道,到目前爲止,已經開發有廠商通道的系統有小米、魅族(flyme)、vivo、oppo、華爲(華爲移動服務HMS),下面是各平臺的入口:

小米開發者平臺 

魅族開發者平臺 注意:魅族推送分爲兩種:一種是自己的廠商推送;一種是集成推送;兩者不同,使用時記住看清,兩者的後臺有點區別的

華爲開發者聯盟 注意:如果要接入華爲推送,就必須把華爲整一個移動服務框架都要集成進去,這個有點坑,而且華爲推送的後臺並不支持全量推送,所以在開發時,還必須自己收集註冊華爲推送返回的token,這個就有點糟心了,增加很多的開發量。我還要吐槽一點,華爲開發者的後臺響應的有點慢,哈哈哈。

vivo開發者平臺 注意:這個需要企業開發者賬號才行,暫時不開放個人開發者使用

oppo開發者平臺 注意:這個如果想要接入必須是已經上線的app纔可以,而且他們後臺也會有一定的審覈,還有,他們對通知欄的自定義樣式有一套很嚴格的要求,也是比較麻煩的。

上面就是各廠商通道的控制後臺,一般要發佈推送建議還是使用他們的後臺進行操作,不建議自己使用他們的後臺接口,因爲,第一點,他們的後臺挺成熟的,第二點,要接入推送一定不止接入一個廠商通道,這樣大大增加後臺開發的工作量,所以建議使用他們自己的後臺。

在app接入推送時,要注意幾點吧,都是我自己踩過的坑,哈哈哈

1、使用一個CallActivity作爲跳轉activity

這種坑出現的情況是這樣的,點擊推送後的點擊事件是打開app,默認打開的是入口activity,我們的app當然不止僅使用一個activity承載,例如我們正在activityB的界面上,此時一條推送進來,我們點擊後的事件是打開app,此時就會出現activityA(即入口Activity)位於棧頂,將ActivityB蓋住。這樣導致activity棧錯亂,流程也可能會因此出現錯誤。

所以:我提供的解決方案是,指定點擊通知欄後,跳轉的activity爲CallActivity(一箇中轉activity),只要我們在這個activity判斷當前是否已經打開應用,如果已經打開就不做處理,如未打開,再跳轉到ActivityA(即入口Activity)走正常打開app的流程。因爲CallActivity最後都要finish自己,這樣就可以保證不會干擾正常Activity棧,也就不會干擾正常的流程。如果想跳轉其他頁面,可以在這個基礎上進行擴展。

2、建議將各廠商通道的集成的需要代碼統一到一個library裏面去,因爲他們在manifest裏面要配置的代碼太多,這樣就會導致主工程的manifest賊多東西。

3、在測試vivo和oppo機型,記得!記得!打開app的通知欄通知開關,他們是默認關閉的。

這是第一種方案,這種方案的缺點是每一次要推送都得跑到他們的後臺去推送,一共又有幾個後臺,產品他們就不開心了。

所有就有了第二種方案,使用第三方集成推送,例如信鴿、極光,他們都集成了廠商通道,但是這種呢,有缺點,他們並沒有把所有的廠商通道都集成進去,例如信鴿裏面就還沒有集成vivo和oppo,所以在這兩種機型上,依舊會出現殺後臺收不到推送信息的情況,下面是第三方集成推送的入口:

信鴿 注意:雖然它集成了廠商通道,我們還是要到各自系統的開發者平臺上申請推送,再信鴿後臺完善相應的信息

極光 同上

這兩款是我們現在公司在用推送SDK感覺還是可以的,都有集成了廠商通道,推送效果還行,但是整體還是比不上第一種方案,原因由於這些集成推送都是免費的,所以在時效上、到達率上不能保證百分之百,而且前面說了他們並沒有把現有的所有廠商通道都集成進去,so,在沒有集成系統上,殺後臺時基本收不到。

不過好消息是,谷歌爸爸準備出面解決這個局面了,哈哈哈,說要聯合所有廠商一起打造一個推送平臺,可能到時接入推送就可以很輕鬆了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章