本文匯總了接入及使用訊息推送組件的過程中經常出現的一些問題及其解決方案。
通用問題
關於許可權的說明
Android 6.0 後,需要使用者手動授予手機許可權,如讀寫 SD 記憶卡。為了更加精準的發送推送,建議開發人員引導擷取訊息推送要求的權限。
日誌無法列印
使用魅族手機測試時,如 log.d
和 log.i
日誌無法列印,您可通過在 設定 > 協助工具功能 > 開發人員選項 中開啟 進階日誌輸出。如遇開發問題,可設定 tag=mpush
,對日誌進行過濾。
Android 相關問題
在 10.1.60.5 ~ 10.1.60.7 版本基準中存在的連接埠解析問題
如果是專有雲環境,對於非 443 連接埠的推送伺服器配置會出現解析失敗導致串連錯誤。
解決方案:
如果使用 config 檔案打包,請在 config 檔案中按如下方式修改:
//config 檔案中其他部分省略,在自訂連接埠號碼前加上\\{空格} { "pushPort":"\\ 8000", }
如果不使用 config 檔案打包,請在
AndroidManifest.xml
中將rome.push.port
的值按如下方式修改://在連接埠號碼前加上\{空格} <meta-data android:name="rome.push.port" android:value="\ 8000" />
接入華為、小米等第三方渠道後,無法發送推送
這是由於沒有開啟 mPaaS 推送控制台的渠道的設定開關。請參見 程式碼範例 以擷取程式碼範例以及使用方法和注意事項。
關於 push ad-token (deviceId) 的產生
服務端依賴 IMSI 和 IMEI 產生 deviceId。因此,建議開發引導使用者擷取所需的 READ_PHONE_STATE
許可權。
實現 PUSH 通知欄訊息,對 EMUI 和華為行動服務是否有版本限制
對 Emotion UI(簡稱 EMUI,是華為基於 Android進行開發的情感化作業系統)和華為行動服務有版本限制,詳細版本要求請參見 裝置接收華為推送訊息的條件。
華為手機無法列印日誌
在手機撥號介面輸入 *#*#2846579#*#* 進入工程菜單 > 後台設定 > LOG 設定 > 選中 AP 日誌。重啟手機後,logcat 開始生效。
華為手機推送錯誤碼
如需瞭解錯誤碼詳情,請至華為官網查看 用戶端錯誤碼詳解 及 服務端錯誤碼詳解。
OPPO 推送支援哪些機型和系統版本
目前支援 ColorOS 3.1 及以上系統的 OPPO 機型,一加 5/5T 及以上機型以及 realme 所有 機型。
ColorOS 是由 OPPO 推出的基於 Android 系統深度定製並最佳化的手機作業系統。
OPPO 手機推送錯誤碼
當 OPPO 推送不生效時,您可在用戶端日誌中搜尋 OPPO onRegister error =
,擷取錯誤碼,並對照 OPPO 錯誤碼查詢相應的錯誤原因。
vivo 推送支援哪些機型和系統版本
目前,SDK 支援的機型和最低系統版本如下表所示。有關 vivo 推送的其它相關問題,請參見 vivo 推送常見問題匯總。
vivo 手機推送錯誤碼
當 vivo 推送不生效時,您可在用戶端日誌中搜尋 fail to turn on vivo push state =
,擷取狀態代碼,並對照 公用狀態代碼 定位具體原因。
Android 常見問題排查步驟
檢查
Manifest
檔案是否配置正確。檢查 appId(華為、小米、vivo)、appSecret(小米、OPPO)、appKey(OPPO、vivo)、ALIPUSH_APPID(mPaaS)是否與對應開發平台的註冊應用一致。
查看 tag 為 mpush 的 logcat 日誌。
iOS 相關問題
當 App 處於前台時, 訊息推送是否會有橫幅或聲音提示
蘋果的預設機制是,當 App 在前台時,訊息可以達到,但是不會展示。如果需要在前台實現展示,需要自己做處理。
訊息狀態是 NoBindInfo
NoBindInfo 表示使用者通過 UserId 去推送,但根據 UserId 沒有找到對應的資訊。請先確認用戶端是否有調用綁定介面,並且對應的 appId 和 workspaceId 是否一致。
訊息狀態是 BadDeviceToken
此狀態只會出現在 iOS 的推送,表示實際推送的 token 非法。先檢查認證的環境是否正確。
如果 App 打包使用開發認證,那麼 push 控制台配置需使用開發環境認證;Xcode 連真機調試,需要使用開發人員認證。
如果 App 打包使用生產認證,那麼 push 控制台配置需要使用生產環境認證。
訊息狀態是 DeviceTokenNotForTopic
此狀態只會出現在 iOS 的推送,表示此 token 與推送的認證的 BundleId 不匹配。先檢查認證是否正確,並且與用戶端打包的 BundleId 是否一致。
iOS 手機無法收到訊息,但訊息狀態是 ACKED
對於 iOS 的推送,如果訊息狀態是 ACKED,表示已經成功推送給蘋果的推送服務。請先確認是否開啟推送許可權,是否有將應用切到後台。
蘋果的預設機制是,當 App 在前台時,訊息可以達到,但是不會展示。如果需要在前台實現展示,需要自己做處理。