首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Bmob Android 推送部分手機收不到?排查清單與解決方案

     編輯:程式設計疑難解答

整合 Bmob 推送後,發現部分手機(特別是國產 ROM)收不到推送,無論指定推送還是廣播推送。本文提供系統性排查清單,涵蓋網路、廠商通道、ROM 限制、代碼配置四大維度。

核心架構:推送到達鏈路

Bmob 伺服器 → 廠商通道 (小米/華為/OPPO/vivo/魅族/FCM) → 手機系統級服務 → App 接收 → 展示/回調

任何一環斷裂皆導致「收不到」。

排查清單(按優先級)

1. 基礎網路與配置(必查)

  • ✅ 手機有網路(Wi-Fi/資料),且能訪問外網(Bmob 域名)。
  • ✅ AndroidManifest.xml 權限齊全:INTERNET, ACCESS_NETWORK_STATE, WAKE_LOCK, RECEIVE_BOOT_COMPLETED。
  • ✅ Bmob 控制台 App ID / Rest Key 正確,推送憑證(APNs/FCM/廠商)已上傳且有效。
  • ✅ BmobPush.startWork(context) 在 Application.onCreate() 呼叫,且 context 為 getApplicationContext()。

2. 國產 ROM 系統級限制(高發區)

廠商關鍵設定代碼/引導
小米 (MIUI)自啟動管理、神隱模式、電池策略「無限制」引導用戶:設定 → 權限 → 自啟動管理 → 開啟 App
華為 (EMUI/HarmonyOS)受保護應用、電池優化「不優化」、通知權限Intent intent = new Intent(); intent.setAction("com.huawei.android.startup"); 跳轉設定
OPPO/ColorOS凍結應用、通知管理、自啟動引導開啟「允許自啟動」、「允許通知」
vivo/FuntouchOS高耗電凍結、自啟動管理、i管家白名單同 OPPO
魅族 (Flyme)後台管理、通知權限、純淨模式設定 → 權限管理 → 後台管理 → 允許

解決方案:集成 Bmob 官方廠商通道 SDK(或個推/極光等第三方推送聚合),自動喚醒廠商系統級通道,大幅提升到達率。

3. 代碼邏輯常見錯誤

  • ❌ installationId 未正確綁定用戶(BmobInstallation.getCurrentInstallation().save())。
  • ❌ 推送條件 BmobQuery 條件錯誤(如 whereEqualTo("channels", "news") 但安裝對象無此欄位)。
  • ❌ BmobPushManager 發送時未指定 setQuery 或 setInstallationId,導致無目標。
  • ❌ BroadcastReceiver 未在 Manifest 註冊或 exported=true 缺失(Android 12+ 必須顯式聲明)。

4. 診斷工具與日誌

  • Bmob 控制台 → 推送記錄:查看「送達數」「點擊數」「失敗原因」。
  • Logcat 過濾:BmobPush, PushService, MiPush, HwPush 等標籤。
  • 測試設備:準備主流品牌真機(小米、華為、OPPO、vivo、三星、原生 Android)驗證。

進階:自建長連接心跳保活

若不依賴廠商通道,需自行實作:

  • 前台服務 Service + Notification 保活(Android 8+ 必須前台)。
  • WebSocket / MQTT 長連接 + 定時心跳(ping/pong)。
  • Doze Mode / App Standby 白名單引導(ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)。

成本極高,強烈建議接入廠商通道 SDK。

快速驗證腳本

// 在 Application.onCreate() 加入測試推送
BmobPushManager manager = new BmobPushManager();
manager.setQuery(BmobInstallation.getQuery());
manager.pushMessageAll("測試推送 " + System.currentTimeMillis());

若測試機收到,說明基礎鏈路通;若特定機型收不到,對應上表 ROM 設定引導用戶或接入廠商 SDK。

總結

  1. 確認網路與基礎配置無誤。
  2. 重點排查國產 ROM 系統級限制(自啟動、電池策略、通知權限)。
  3. 接入 Bmob 廠商通道 SDK 或遷移至個推/極光/騰訊信鴿等聚合推送服務。
  4. 建立多品牌真機測試矩陣,持續監控到達率。

推送到達率本質是「系統級通道可用性」與「用戶授權」的博弈,技術手段儘可能,運營引導同樣關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved