HMS Core 推送服務(Push Kit)是華為提供的消息推送平台,建立了從雲端到終端的消息推送通道。開發者通過集成推送服務,可以向客戶端應用實時推送消息,構築良好的用戶關系,提升用戶的感知度和活躍度。
推送服務由兩個部分構成:
-
從雲端到終端的消息推送通道:開發者可以通過推送服務,向客戶端應用實時推送數據和消息。
-
終端消息展示:位於通知中心、終端桌面橫幅、終端鎖屏等多種類型和樣式的消息展示。
具體可以參考以下官方文檔:
在應用接入推送服務的過程中,開發者還向我們反映了一些隱私安全、報錯、消息延遲等問題。這里小編進行了匯總分析,希望為開發者們提供參考、進一步提升服務質量。
1. 隱私安全問題
應用使用華為推送服務,庫為“ com.huawei.hms:push:3.0.3.301 ”,上架華為應用市場后提示 :尊敬的開發者,您好!審核過程系統檢測得出您的應用存在獲取用戶的軟件安裝列表敏感信息,因此需要在隱私政策內說明,如應用通過xx方式獲取xx范圍的軟件安裝列表信息,覆蓋xx范圍的用戶並通過xx方式服務於xx功能。
具體可參考鏈接:
https://developer.huawei.com/consumer/cn/doc/distribution/app/FAQ-faq 第1.2的相關內容,最終以審核結果為准。
"stackTrace":["android.app.ApplicationPackageManager.getInstalledPackages(ApplicationPackageManager.java:886)","com.huawei.hms.aaid.c.a.a(AaidUtils.java:91)","com.huawei.hms.aaid.c.a.b(AaidUtils.java:141)","com.huawei.hms.aaid.HmsInstanceId.getId(HmsInstanceId.java:97)","com.huawei.hms.aaid.HmsInstanceId.getToken(HmsInstanceId.java:179)","
解決方式 : SDK 5.1.1.301 之前版本會通過getInstalledPackages方法讀取應用列表,解決方式升級版本。
2. 桌面角標注意事項
1) add_num字段
支持:EMUI版本8.0.0(及以上)推送服務應用版本8.0.0(及以上)
set_num字段
支持:EMUI版本9.1.0(及以上)推送服務應用版本10.1.0(及以上)
2) 華為桌面角標開發
支持平台、系統版本:EMUI 4.1 及以上
桌面版本:6.3.29
支持設備:華為設備
3) 下發消息參數、add_num參數、integer類型
描述:應用角標累加數字非應用角標實際顯示數字,為大於0小於100的整數。例如,某應用當前有N條未讀消息,若add_num設置為3,則每發一次消息,應用角標顯示的數字累加3,為N+3。
4) class參數、String參數、必選參數
描述:應用入口Activity類全路徑。樣例:com.example.hmstest.MainActivity
5) set_num參數、integer類型
描述:角標設置數字,大於等於0小於100的整數。例如,set_num設置為10,則不論發了多少次消息,應用角標顯示的數字都是10。如果set_num與add_num同時存在時,以set_num為准。
(說明:發送消息同時設置應用角標數字,“class“必填,“add_num”和”set_num”參數選填。若“add_num”和“set_num”都設置為空,則應用角標數字默認加1。)
3. 消息延遲問題
有的開發者反應,用戶延遲幾分鍾才能接收到應用的推送消息。針對該問題,由於華為推送消息量每日達百億級,因此無法保證單條消息到達的實時性。官網有相關描述:充分保障通知欄消息的送達,十分鍾在線到達率高達99%。感謝開發者們的理解與支持!
4. 收不到推送消息
消息可分為兩種:通知欄消息收到后由通知欄展示;透傳消息不在通知欄展示由onMessageReceived回調方法返回數據。開發者需要注意,首先確認發消息的類型,不要誤把透傳消息當成通知欄消息發送造成通知欄沒有收到消息的假象。其次,是否使用了foreground_show 字段參數為 false,由onMessageReceived回調方法返回數據不會在通知欄展示。問題定位后,解決方法如下:
- 通知欄消息收不到
-
查看是否關閉了應用允許通知、渠道通知開關等攔截消息開關。
-
排查發消息與端側token是否一致,嘗試使用重新獲取push token后下發消息。
-
可在AGC平台選中推送服務、自助分析查詢消息下發狀態,也可以查詢token是否可用。
- 透傳消息收不到:確認應用是否存活。當應用是存活狀態時,不管是前台或后台,下發后使用onMessageReceived回調方法返回數據,應用被殺都是收不到的。
5. 設置自定義鈴聲
1) 自定義渠道方式下,channel_id字段在應用的數據處理位置為中國區時無效。也就是說自定義渠道方式設置鈴聲不可行,直接使用sound字段進行設置即可。
2) 鈴聲資源必須放在應用的/res/raw路徑下,支持的鈴聲格式包括MP3、WAV、MPEG等。
3) sound字段參數格式為:/raw/shake。
4) 使用sound字段需要在創建渠道前,渠道創建后使用無效,可以將應用卸載重裝、清除請用數據后重新測試。
6. 通知亮屏
1) 確保亮屏打開開關,設置->通知中心->更多通知設置->通知亮屏提示。
2) 確保通知中心鎖屏通知總開關是開啟的,設置->通知中心->鎖屏通知。
3) 確保應用通知渠道開關是開啟的,設置->通知中心->您的應用->選擇渠道->鎖屏通知。
7. 檢測出隱式PendingIntent的問題
目前此問題在6.3.0.302版本已全部處理,請開發者參考更新文檔:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-app-version-0000001074227861?ha_source=hms1
8. 推送接口返回503
錯誤代碼503是指流控限制。目前默認6000qps,建議每次發送的token數量不超過100,可以每次調用60,每秒調用100次。具體參照以下鏈接:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/faq-0000001050042183#section196822541234?ha_source=hms1
9. 獲取token時OnNewToke不回調
1) 排查是否有多個“service”繼承HmsMessageService類,只能有一個類繼承HmsMessageService。
2) 檢查測試設備是否為EMUI10及以上版本,如果是,則不回調,直接在getToken方法中返回token。
3) 是否覆寫onNewToken(String token, Bundle bundle)方法,Push SDK版本低於5.0.4.302,請覆寫onNewToken(String token)方法。可以復寫onTokenError方法查看是否有返回錯誤信息。
4) 若為EMUI10及以上版本,且配置了自動獲取token,則需要檢查配置是否正確,參考文檔(自動初始化):https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-client-dev-0000001050042041#section13546121751811?ha_source=hms1
5) 檢查manifest文件,是否注冊您自己的“service”,該服務繼承HmsMessageService類,用於接收Token。 參考文檔(配置manifest.xml文件):https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-cfg-manifest-0000001050042037
6) 檢查push開關是否打開:登錄AppGallery Connect網站,
-
a. 開發-概覽-右側的齒輪小圖標-API管理-打開Push服務。
-
b. 開發-增長服務-推送服務-點擊開通,修改服務狀態為已開通。
以上兩種情況,如果是剛剛修改完,需要等待15分鍾時間才能生效。
10. 錯誤碼:907135000
在Service調用推送初始化:
public static void startPushService(Context c) {
context = c;
hwApi = new HuaweiApiClient.Builder(context)
.addApi(HuaweiPush.PUSH_API)
.addConnectionCallbacks(pushHw)
.addOnConnectionFailedListener(pushHw).build();
hwApi.connect();
}
連接有錯誤:@Override
public void onConnectionFailed(ConnectionResult result) {
PluginLog.i(TAG, "onConnectionFailed, ErrorCode: " + result.getErrorCode() );
}
輸出:PushHw: onConnectionFailed, ErrorCode: 907135000
錯誤碼907135000的排查步驟:
1) 請檢查“agconnect-services.json”文件中的app_id、package_name參數是否與端側一致。
2) 請檢查“build.gradle”文件中證書簽名是否配置。
3) 有可能是HMS Core(APK)緩存導致的,請卸載並重新更新HMS Core(APK),然后斷開網絡再連接,再打開應用。
4) 建議用華為終端先測試,華為推送會依賴HMS Core(APK),在華為手機上都會預裝這個應用,非華為手機上沒有預裝。
5) 關於簽名證書:你應用的簽名文件和用你簽名文件生成的SHA256指紋證書要匹配,而且項目中配置簽名文件的地方也得和以上兩個用的簽名文件一致。
6) 檢查接送文件位置,要在項目級的app目錄下。
7) 在文件頭apply plugin: 'com.android.application’下一行添加如下配置。
apply plugin: ‘com.huawei.agconnect’ (app模塊build文件有沒有加apply plugin。)
8) 手動在manifest加一下appid的值驗證下是不是配置的問題。比如:
<meta-data
android:name=“com.huawei.hms.client.appid”
android:value=“102729671” />
9) 可能是配置混淆問題,可以參看:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-obfuscation-scripts-0000001050176973
欲了解更多HMS Core推送服務詳情,請參閱:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/service-introduction-0000001050040060?ha_source=hms1
華為開發者聯盟官網
獲取開發指導文檔
參與開發者討論請到Reddit社區
下載demo和示例代碼請到Github
解決集成問題請到Stack Overflow
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導文檔
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~