廠商 push 不通排查指南

爲了提高「MPS 消息推送」的推送的到達率,mPaaS 集成了華爲、小米等廠商的推送功能,從而有效地提升用戶留存率,提高用戶體驗。在平常運維過程當中,發現少部分設備在廠商 push下沒法 push,在此分享下相關案例的排查過程,方便後續同類問題借鑑。

1、push 相關背景

1.push 總體架構css

以接觸最多的國內 Android 設備爲例,總體結構以下:java

2.廠商 push 和自建 push服務器

廠商 push 通道:優勢是經過各個 OS 廠商維護的長連接進行推送,在 App 被系統殺掉後也能夠進行推送,推送到達率高於自建push。支持華爲,小米,oppo,vivo等廠商。缺點是,目前廠商的push基本都只支持通知欄消息的推送,在用戶點擊通知前,不啓動應用,對紅點, 圖片等消息格式支持有限。架構

自建push通道:經過App啓動後和自建服務端的長鏈接通道實現推送,缺點也很明顯,App被殺掉後,就沒法收到信息。主要用於不支持廠商渠道場景下的push。運維

2、問題排查舉例

經過上面的介紹,能夠看出三方廠商 push 是否成功,主要取決於三個鏈路,分別爲:測試

  1. 三方 token 正確生成上報
  2. 服務端正常轉發到廠商服務器
  3. 下發到客戶端消息能夠正常顯示

1.測試準備ui

爲了快速驗證問題,咱們須要準備一個推送程序,能夠快速推送信息到App上。MPS提供了推送的Http接口供外部調用,咱們能夠經過初始化一個簡單的java程序實現推送信息的發送,方便聯調。使用連接阿里雲

2.三方 token 生成階段spa

目前 mPaaS 對三方廠商 push 的 token 生成分爲如下步驟。3d

2.1 設備在三方push的廠商列表裏

以華爲設備爲例,判斷是不是華爲設備的標準是,檢測當前手機是不是 emui,若是是才走華爲 PUSH SDK。在咱們平常運維的 case 中,發現過部分設備因爲刷機或者其餘操做,在華爲手機上安裝的不是 emui,相似這種設備是走不了華爲 push 的,只能走自建 push。

以vivo設備爲例,低版本手機只有在vivo公佈的白名單設備內才支持推送。

2.2 生成三方 token

在調用 push sdk 生成 token 的過程當中,因爲 push sdk 的生成也依賴當前手機的 room 版本,以華爲爲例,就將依賴華爲手機內置的 HMS Core 版本。針對這種場景下的問題,在獲取三方 token 失敗的時候,會在回調裏返回對應錯誤碼。以下圖所示,搜索 push 的關鍵字 mPush14,而後過濾,能夠獲取 token 返回錯誤碼2。

咱們查看華爲定義的錯誤碼,發現2表示 SERVICE_VERSION_UPDATE_REQUIRED,須要升級當前的 HMS 版本。

升級HMS版本的方案有兩個

方案1:主動升級,調用更新服務接口,升級更新效果以下所示:

在啓動階段調用以下服務,安裝更新華爲推送服務
if (HuaweiApiAvailability.getInstance().isHuaweiMobileNoticeAvailable(context) == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) {
   // 須要升級
  HuaweiApiAvailability.getInstance().resolveError(activity, ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED, 1);
}

 

方案2: 引導用戶去華爲設置裏去升級

2.3 三方 token 正常上報

生成 token 後會經過 RPC 接口上報到 MPS 服務端,須要檢查 RPC 接口是否有異常,上報接口是:alipay.client.yunpushcore.device.report

2.4 token 過時

以 oppo 爲例,是在應用第一次啓動時註冊生效,後在刷機、還原手機(設置-其餘設置-還原手機)、卸載應用時會失效,須要從新註冊才能推送。

3.服務端投送階段

3.1 消息包含了紅點,靜默,羣發

目前若是消息設置了紅點或者靜默,由於廠商 push 不支持,MPS 會自動走自建 push。

3.2 三方服務端報錯

這種主要用做 mPaaS 服務端推送到三方服務端後,三方返回異常。這種須要去 MPS 拉取服務端報錯日誌,而後覈對廠商文檔解決,好比華爲服務端報錯文檔。

3.3 三方服務端限流

以 vivo 爲例,默認推送走的是運營消息,天天只能對同一個用戶推送 5 次。只有改爲系統 push 類型才能沒有這個限制。

4. 設備顯示階段

4.1 設備必須打開通知權限才能顯示

好比 oppo 的通知權限默認是關閉的,須要打開通知權限,或者引導用戶打開後才能顯示。

4.2 應用包名和註冊 oppo 配置保持一致

應用的包名要和註冊 oppo 平臺填寫的包名要一致,否則不會顯示。

3、其餘常見問題

1.經常使用日誌舉例

1.1 tag:mPush14

主要是 mPaaS 上層應用層日誌打印,打印 push 註冊 token 相以及自建通道 push 相關信息。

1.2 tag: mcssdk

mcssdk 是 oppo push sdk 的日誌 tag,能夠查看廠商的一些日誌信息,好比查看三方 token

2.其餘思路

若是以上都解決不了,最後建議去看各個廠商的官方介紹,可能會找到一些思路。

  • oppo FAQ
  • vivo FAQ

做者:榮陽

 

原文連接

本文爲阿里雲原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索