友盟 有關設備離線和在線問題

本文轉載自:有關設備離線和在線問題


有關設備離線,在線,設備未註冊以及設備狀態不存在等狀態,請參考下文:Android查詢設備狀態,幾種狀態的解釋說明
判斷設備長連是否在線應該在在友盟推送後臺--工具--設備狀態查詢裏面查詢,如下圖:

       如果設備長連在線仍然沒有收到:可以查詢下,設備狀態有個更新時間,如下圖:

       統計設備長連在線時間(最後更新時間)有時是有一些延時的。有可能最後更新時間時設備在線,但當前設備已經是離線狀態了。

       設備長連在線只和三個條件有關:1、網絡環境穩定良好     2、pushservice運行3、push service連接上友盟服務器。

       判斷pushservice是否運行,要在設定--應用程序管理--運行中進行查看進程,如下圖:



       你也可以通過 adb shell ps | grep com.umeng.message.example 這個指令查詢到友盟push的進程,如下圖:



       說到pushservice,我們就要引入“宿主”的概念了。
       由於pushSDK在設計上採取了多路複用的技術方案,即設備上多個集成了友盟消息推送SDK的App會共用一條長連通道, push service會掛靠在某一個App上,此時長連service所掛靠的App稱爲“宿主”。
       綜上,若自己的App不是宿主,而是掛在別的App上,我們會提示目前的宿主是用戶設備中的哪款App,並附上當時設備的device_token,如下圖:

(圖爲2015年聖誕前夕,友盟推送的節日特別頁面)

       如上文所說,設備在線時,push service應該是運行的。但也有可能push service在用戶設備上存在,卻未連接到友盟推送的服務器,從而導致了設備離線。檢查此種情況,你可以在logcat裏面,查看push service的心跳信息,如下圖:

       如果有心跳信息的話,說明用戶設備到友盟推送服務器之間的長連接是暢通的,但是有可能消息已經推送到了設備上,卻並沒有被展示出來。此時,你可以再查詢一下設備的消息歷史,如下圖所示 :


       這裏我來解釋下“已送達“這個狀態的定義。”已送達“說明消息已經確實被下發。消息送達到設備後,設備返回給友盟推送服務器一個ack回執,告訴服務器端App已經收到消息,服務器纔會把狀態歸檔成 ”已送達”。
       此外,通過查看logcat裏面的onMessage,也可以打印出來消息是否已經送到,如下圖:

       
      
       當你通過上述兩種方式確定消息已經下發到手機,但是並沒有顯示出來後,你需要檢查以下情況:
1、 包名填錯了,即包名與申請時所填的包名不一致;因此,消息無法路由到App頭上。(詳見STEP 3)
2、 在之前的代碼裏調用了PushAgent.setPushIntentServiceClass(MyPushIntentService.class);
後來又將該代碼註釋了。但是由於,SDK使用的SharedPreference存儲該IntentService變量名,故雖然代碼被註釋了,但仍然可以從SharedPreference裏讀取到相應的IntentService,從而導致錯誤。
遇到此種情況,你只需把app清理數據或者重新安裝便可解決。
3、 有可能是個別機型或者個別設備的適配問題所導致的,可以嘗試換個其他型號的設備再進行測試。

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