1. 程式人生 > >安卓無法收到推送的問題

安卓無法收到推送的問題

注:我就那麼一說,你就那麼一聽。我也不知道說的對不對,就是寫出來求打臉的。歡迎大家加Q群:239904121 打臉。

相信大多人的專案中都會用到推送,極光友盟等,然而經常又被運營和測試問:為什麼收不到推送???

我的結論是這樣的(以極光為例):

一:app在執行中:
基本上是可以收到推送的。如果無法收到推送,可能有以下幾種:
1、沒有網路(一般可以忽略,使用者、測試、運營都不是笨蛋);
2、手機設定的問題(可以參考這裡進行設定:
https://community.jiguang.cn/t/android/606/2 ),嚴格來說這種情況不是收不到推送,而是推送沒有顯示到通知欄;
3、整合出錯(測試通過,key核對過,基本上也可以忽略);
4、第三方服務出錯(可能性很小,基本上可以忽略);

綜上:執行中無法收到推送,基本上就可以判定是設定問題了。

二:APP不在執行中:
可能收到推送,也可能收不到推送,取決於後臺是否有極光服務程序。
不在執行中無法收到推送的問題,是無法解決的,這個後面在說。
在這種情況下,能收到推送是因為後臺仍保留極光服務程序,反之亦然。這個極光服務可能是你的app生成的,也可能是其他app生成的,只要有一個極光服務在,並且啟動它的主執行緒開啟了共享極光服務,你app也開啟了共享極光服務(推薦大家開啟),就能正常收到推送,互相融達。
例如:大多數時候,app退出時是被一鍵清理,這種情況下基本上所有app都被殺死了,那麼這種情況下有很大概率是收不到推送的。

三、為什麼有的手機一鍵殺死卻可以收到通知
據我所知安卓6.0之前的原生系統是可以做到被殺死之後自動重啟服務的,這也是極光早期非常好用的原因,那會大多人還在用安卓原生系統。而谷歌在安卓6.0之後也禁止這種流氓行徑了。

四、QQ和微信為什麼可以?
其實QQ和微信也不可以,在某些系統上預設開設白名單而已,比如MIU系統,預設QQ和微信是在白名單的,允許自啟動,允許推送等。

五、蘋果為什麼可以?
完全是兩套不同機制。蘋果手機上的app只連線蘋果伺服器,只要往蘋果伺服器推訊息就行。而安卓每個app都連結一個伺服器,例如我們的app連結到我們伺服器。

六、有沒有辦法通過實現常駐程序來解決這個問題?
網上說的什麼root,保留一畫素,雙程序守護,從底層fork的方法,都是不可用的。我個人沒有逐個驗證,但是最簡單想一想就知道了,如果可以實現,為什麼極光不做到常駐呢?
所以說,不在執行中無法收到推送的情況,是無法解決的,無法常駐記憶體,那麼肯定服務都不在執行的時候,如何受到推送呢?這暫時是個無解的問題。

希望對大家有所幫助,歡迎打臉。