厂商 push 不通排查指南
簡介:?MPS 集成多個(gè)三方渠道,保障 push 使命必達(dá)的必須知道的幾件事。
?
為了提升「MPS 消息推送」的推送的到達(dá)率,mPaaS 集成了華為、小米等廠商的推送功能,從而有效地提高用戶留存率,提升用戶體驗(yàn)。在日常運(yùn)維過程中,發(fā)現(xiàn)少部分設(shè)備在廠商 push下無法 push,在此分享下相關(guān)案例的排查過程,方便后續(xù)同類問題借鑒。
一、push 相關(guān)背景
1.push 整體架構(gòu)
以接觸最多的國內(nèi) Android 設(shè)備為例,整體結(jié)構(gòu)如下:
?
2.廠商 push 和自建 push
廠商 push 通道:優(yōu)點(diǎn)是通過各個(gè) OS 廠商維護(hù)的長鏈接進(jìn)行推送,在 App 被系統(tǒng)殺掉后也可以進(jìn)行推送,推送到達(dá)率高于自建push。支持華為,小米,oppo,vivo等廠商。缺點(diǎn)是,目前廠商的push基本都只支持通知欄消息的推送,在用戶點(diǎn)擊通知前,不啟動應(yīng)用,對紅點(diǎn), 圖片等消息格式支持有限。
自建push通道:通過App啟動后和自建服務(wù)端的長連接通道實(shí)現(xiàn)推送,缺點(diǎn)也很明顯,App被殺掉后,就無法收到信息。主要用于不支持廠商渠道場景下的push。
二、問題排查舉例
通過上面的介紹,可以看出三方廠商 push 是否成功,主要取決于三個(gè)鏈路,分別為:
1.測試準(zhǔn)備
為了快速驗(yàn)證問題,我們需要準(zhǔn)備一個(gè)推送程序,可以快速推送信息到App上。MPS提供了推送的Http接口供外部調(diào)用,我們可以通過初始化一個(gè)簡單的java程序?qū)崿F(xiàn)推送信息的發(fā)送,方便聯(lián)調(diào)。使用鏈接
2.三方 token 生成階段
目前 mPaaS 對三方廠商 push 的 token 生成分為以下步驟。
2.1 設(shè)備在三方push的廠商列表里
以華為設(shè)備為例,判斷是否是華為設(shè)備的標(biāo)準(zhǔn)是,檢測當(dāng)前手機(jī)是否是 emui,如果是才走華為 PUSH SDK。在我們?nèi)粘_\(yùn)維的 case 中,發(fā)現(xiàn)過部分設(shè)備由于刷機(jī)或者其他操作,在華為手機(jī)上安裝的不是 emui,類似這種設(shè)備是走不了華為 push 的,只能走自建 push。
以vivo設(shè)備為例,低版本手機(jī)只有在vivo公布的白名單設(shè)備內(nèi)才支持推送。
?
2.2 生成三方 token
在調(diào)用 push sdk 生成 token 的過程中,由于 push sdk 的生成也依賴當(dāng)前手機(jī)的 room 版本,以華為為例,就強(qiáng)依賴華為手機(jī)內(nèi)置的 HMS Core 版本。針對這種場景下的問題,在獲取三方 token 失敗的時(shí)候,會在回調(diào)里返回對應(yīng)錯(cuò)誤碼。如下圖所示,搜索 push 的關(guān)鍵字 mPush14,然后過濾,可以獲取 token 返回錯(cuò)誤碼2。
?
我們查看華為定義的錯(cuò)誤碼,發(fā)現(xiàn)2表示 SERVICE_VERSION_UPDATE_REQUIRED,需要升級當(dāng)前的 HMS 版本。
?
升級HMS版本的方案有兩個(gè)
方案1:主動升級,調(diào)用更新服務(wù)接口,升級更新效果如下所示:
在啟動階段調(diào)用如下服務(wù),安裝更新華為推送服務(wù) if (HuaweiApiAvailability.getInstance().isHuaweiMobileNoticeAvailable(context) == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) {// 需要升級HuaweiApiAvailability.getInstance().resolveError(activity, ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED, 1); }?
方案2: 引導(dǎo)用戶去華為設(shè)置里去升級
2.3 三方 token 正常上報(bào)
生成 token 后會通過 RPC 接口上報(bào)到 MPS 服務(wù)端,需要檢查 RPC 接口是否有異常,上報(bào)接口是:alipay.client.yunpushcore.device.report
?
2.4 token 過期
以 oppo 為例,是在應(yīng)用第一次啟動時(shí)注冊生效,后在刷機(jī)、還原手機(jī)(設(shè)置-其他設(shè)置-還原手機(jī))、卸載應(yīng)用時(shí)會失效,需要重新注冊才能推送。
?
3.服務(wù)端投送階段
3.1 消息包含了紅點(diǎn),靜默,群發(fā)
目前如果消息設(shè)置了紅點(diǎn)或者靜默,因?yàn)閺S商 push 不支持,MPS 會自動走自建 push。
3.2 三方服務(wù)端報(bào)錯(cuò)
這種主要用作 mPaaS 服務(wù)端推送到三方服務(wù)端后,三方返回異常。這種需要去 MPS 拉取服務(wù)端報(bào)錯(cuò)日志,然后核對廠商文檔解決,比如華為服務(wù)端報(bào)錯(cuò)文檔。
3.3 三方服務(wù)端限流
以 vivo 為例,默認(rèn)推送走的是運(yùn)營消息,每天只能對同一個(gè)用戶推送 5 次。只有改成系統(tǒng) push 類型才能沒有這個(gè)限制。
4. 設(shè)備顯示階段
4.1 設(shè)備必須打開通知權(quán)限才能顯示
比如 oppo 的通知權(quán)限默認(rèn)是關(guān)閉的,需要打開通知權(quán)限,或者引導(dǎo)用戶打開后才能顯示。
4.2 應(yīng)用包名和注冊 oppo 配置保持一致
應(yīng)用的包名要和注冊 oppo 平臺填寫的包名要一致,不然不會顯示。
三、其他常見問題
1.常用日志舉例
1.1 tag:mPush14
主要是 mPaaS 上層應(yīng)用層日志打印,打印 push 注冊 token 相以及自建通道 push 相關(guān)信息。
?
1.2 tag: mcssdk
mcssdk 是 oppo push sdk 的日志 tag,可以查看廠商的一些日志信息,比如查看三方 token
?
2.其他思路
如果以上都解決不了,最后建議去看各個(gè)廠商的官方介紹,可能會找到一些思路。
- oppo FAQ
- vivo FAQ
?
?
?
?
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的厂商 push 不通排查指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小红书推荐大数据在阿里云上的实践
- 下一篇: 一文读懂 - 云上用户如何灵活应用定制化