mPaas 厂商 push 不通排查指南
1. 背景
金融級移動開發平臺 mPaaS[1](Mobile PaaS)為 App 開發、測試、運營及運維提供云到端的一站式解決方案,能有效降低技術門檻、減少研發成本、提升開發效率,協助企業快速搭建穩定高質量的移動應用。其中消息推送服務(Message Push Service,簡稱 MPS)為開發者提供了專業的移動消息推送方案,針對不同的場景推出多種推送類型,滿足個性化推送需求。為了提升推送的到達率,mPaaS 集成了華為、小米等廠商的推送功能,從而有效地提高用戶留存率,提升用戶體驗。在我們日常運維過程中,發現少部分設備在廠商push下無法push,在此分享下相關案例的排查過程,方便后續同類問題借鑒。
2. push相關背景
2.1 push整體架構
以接觸最多的國內Android設備為例,整體結構如下,官網已經給出詳細介紹[2],這里不在贅述。
2.2 廠商push和自建push
廠商push通道:優點是通過各個OS廠商維護的長鏈接進行推送,在App被系統殺掉后也可以進行推送,推送到達率高于自建push。支持華為,小米,oppo,vivo等廠商。缺點是,目前廠商的push基本都只支持通知欄消息的推送,在用戶點擊通知前,不啟動應用,對紅點, 圖片等消息格式支持有限。
自建push通道:通過App啟動后和自建服務端的長連接通道實現推送,缺點也很明顯,App被殺掉后,就無法收到信息。主要用于不支持廠商渠道場景下的push。
3. 問題排查舉例
通過上面的介紹,可以看出三方廠商push是否成功,主要取決于三個鏈路,分別為:
1) 三方token正確生成上報
2) 服務端正常轉發到廠商服務器
3) 下發到客戶端消息可以正常顯示
3.1 測試準備
為了快速驗證問題,我們需要準備一個推送程序,可以快速推送信息到App上。MPS提供了推送的Http接口供外部調用,我們可以通過初始化一個簡單的java程序實現推送信息的發送,方便聯調。可參考文后資料了解詳情[3] 。
3.2 三方token生成階段
目前mPaas對三方廠商push的token生成分為以下步驟。
3.2.1 設備在三方push的廠商列表里
以華為設備為例,判斷是否是華為設備的標準是,檢測當前手機是否是emui, 如果是才走華為PUSH SDK。在我們日常運維的case中,發現過部分設備由于刷機或者其他操作,在華為手機上安裝的不是emui,類似這種設備是走不了華為push的,只能走自建push。
以vivo設備為例,低版本手機只有在vivo公布的白名單設備內才支持推送。白名單可參考文后資料了解詳情[4]。
3.2.2 生成三方token
在調用push sdk生成token的過程中,由于push sdk的生成也依賴當前手機的room版本,以華為為例,就強依賴華為手機內置的HMS Core版本。針對這種場景下的問題,在獲取三方token失敗的時候,會在回調里返回對應錯誤碼。如下圖所示,搜索push的關鍵字mPush14, 然后過濾,可以獲取token返回錯誤碼2。
我們查看華為定義的錯誤碼,發現2表示SERVICE_VERSION_UPDATE_REQUIRED,需要升級當前的HMS版本。可參考文后資料了解詳情[5]。
升級HMS版本的方案有兩個
方案1: 主動升級,調用更新服務接口,升級更新效果如下所示:
在啟動階段調用如下服務,安裝更新華為推送服務
if (HuaweiApiAvailability.getInstance().isHuaweiMobileNoticeAvailable(context) == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) { // 需要升級 HuaweiApiAvailability.getInstance().resolveError(activity, ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED, 1); }
方案2: 引導用戶去華為設置里去升級
可參考文后資料了解詳情[6]
3.2.3 三方token正常上報
生成token后會通過RPC接口上報到MPS服務端,需要檢查RPC接口是否有異常,上報接口是:alipay.client.yunpushcore.device.report
3.2.4 token過期
以oppo為例,是在應用第一次啟動時注冊生效,后在刷機、還原手機(設置-其他設置-還原手機)、卸載應用時會失效,需要重新注冊才能推送。
3.3 服務端投送階段
3.3.1 消息包含了紅點,靜默,群發
目前如果消息設置了紅點或者靜默,因為廠商push不支持,MPS會自動走自建push。
3.3.2 三方服務端報錯
這種主要用作mPaas服務端推送到三方服務端后,三方返回異常。這種需要去MPS拉取服務端報錯日志,然后核對廠商文檔解決,比如華為服務端報錯文檔,可參考文后資料了解詳情[7]。
3.3.3 三方服務端限流
以vivo為例,默認推送走的是運營消息,每天只能對同一個用戶推送5次。只有改成系統push類型才能取消該限制,可參考文后資料了解詳情[8]
3.4 設備顯示階段
3.4.1 設備必須打開通知權限才能顯示
比如oppo的通知權限默認是關閉的,需要打開通知權限,或者引導用戶打開后才能顯示。
3.4.2 應用包名和注冊oppo配置保持一致
應用的包名要和注冊oppo平臺填寫的包名要一致,不然不會顯示
4. 其他常見問題
4.1 常用日志舉例
4.1.1 tag:mPush14
主要是mPaas上層應用層日志打印,打印push注冊token相以及自建通道push相關信息
4.1.2 tag: mcssdk
mcssdk 是oppo push sdk的日志tag, 可以查看廠商的一些日志信息,比如查看三方token
4.2 其他思路
如果以上都解決不了,最后建議聯系廠商。
參考文檔
[1] mPaaS平臺:https://www.aliyun.com/product/mobilepaas/mpaas
[2]Push整體架構:https://help.aliyun.com/document_detail/97485.html?spm=a2c4g.11186623.6.745.6a06530dwB0Zp0
[3] API 說明 - 服務端: https://help.aliyun.com/document_detail/158619.html
[4]vivo白名單:https://dev.vivo.com.cn/documentCenter/doc/156
[5] 華為通用結果代碼:https://developer.huawei.com/consumer/en/doc/development/HMS-2-References/hmssdk_jointOper_api_reference_errorcode
[6]如何更新HMS Core(華為移動服務):https://consumer.huawei.com/cn/support/content/zh-cn04461342/
[7] 華為服務端報錯文檔:https://developer.huawei.com/consumer/cn/doc/development/HMS-2-References/hmssdk_huaweipush_api_reference_agent_s2
[8] vivo推送消息分類功能說明:https://dev.vivo.com.cn/documentCenter/doc/359
我們是阿里云智能全球技術服務-SRE團隊,我們致力成為一個以技術為基礎、面向服務、保障業務系統高可用的工程師團隊;提供專業、體系化的SRE服務,幫助廣大客戶更好地使用云、基于云構建更加穩定可靠的業務系統,提升業務穩定性。我們期望能夠分享更多幫助企業客戶上云、用好云,讓客戶云上業務運行更加穩定可靠的技術,您可用釘釘掃描下方二維碼,加入阿里云SRE技術學院釘釘圈子,和更多云上人交流關于云平臺的那些事。
原文鏈接:https://developer.aliyun.com/article/781276?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的mPaas 厂商 push 不通排查指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据创新的四个陷阱
- 下一篇: 从零搭建 dubbogo