本文介紹華為推送的接入流程,主要包括以下三個步驟。
註冊華為推送
登入華為開發官網,註冊帳號並且開啟推送服務。詳情請參見 華為推送開啟步驟。
接入華為推送
推送 SDK 支援接入華為 HMS2 和 HMS5,但二者只能擇其一接入。
HMS2 版本過舊,如果您是首次接入,推薦接入 HMS5。
如果您是從 HMS2 升級到 HMS5,請先刪除下文列出的 HMS2
AndroidManifest
配置。
接入華為推送 - HMS5.x 版本
添加 推送 - HMS5 組件,方式與添加推送 SDK 相同,參見 添加推送 SDK 。
說明推送 - HMS5 組件僅包含適配代碼,不包含 HMS SDK,請按照下文單獨添加 HMS SDK 依賴。
在華為應用服務控制台下載設定檔
agconnect-services.json
並放置到應用主工程的assets
目錄下。在專案根目錄下的
build.gradle
檔案中配置 HMS SDK 的 Maven 倉地址。allprojects { repositories { // 其他repo已省略 maven {url 'https://developer.huawei.com/repo/'} } }
在主工程的
build.gradle
檔案中添加 HMS SDK 依賴。dependencies { implementation 'com.huawei.hms:push:5.0.2.300' }
HMS SDK 版本會經常更新,最新版本號碼可以參考 HMS SDK 版本更新說明。
當前適配的版本為 5.0.2.300,如需使用更高版本,可根據需求修改,通常來說廠商 SDK 都會向下相容,如不相容可加入DingTalk群 41708565 反饋適配新版的需求。
如需使用混淆,則要添加相關混淆配置:
所有接入方式均需要添加 華為推送混淆規則。
如採用的是 AAR 接入方式,還需要 添加 mPaaS 混淆規則。
接入華為推送 - HMS2.x 版本
添加 推送 - 華為2 組件,方式與添加推送 SDK 相同,參見 添加 SDK 。 當前內建的 HMS2 SDK 版本為 2.5.2.201。
配置
AndroidManifest.xml
(組件化方式在 Portal 工程中添加),並替換其中的com.huawei.hms.client.appid
的值。<activity android:name="com.huawei.hms.activity.BridgeActivity" android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale" android:excludeFromRecents="true" android:exported="false" android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent"> <meta-data android:name="hwc-theme" android:value="androidhwext:style/Theme.Emui.Translucent" /> </activity> <!--為了防止低版本 dex 崩潰,動態開啟 provider,enabled 設定為 false--> <provider android:name="com.huawei.hms.update.provider.UpdateProvider" android:authorities="${applicationId}.hms.update.provider" android:exported="false" android:enabled="false" android:grantUriPermissions="true"> </provider> <!-- value 的值“appid”用實際申請的應用 ID 替換,來源於開發人員聯盟網站應用程式的服務詳情。注意,value 中的斜杠(\)及空格要保留。--> <meta-data android:name="com.huawei.hms.client.appid" android:value="\ your huawei appId" /> <receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver" android:exported="true" > <intent-filter> <!-- 接收通道發來的通知欄訊息,相容老版本 PUSH --> <action android:name="com.huawei.intent.action.PUSH" /> </intent-filter> </receiver> <receiver android:name="com.alipay.pushsdk.thirdparty.huawei.HuaweiPushReceiver" android:exported="true" android:process=":push"> <intent-filter> <!-- 必須,用於接收 TOKEN --> <action android:name="com.huawei.android.push.intent.REGISTRATION" /> <!-- 必須,用於接收訊息 --> <action android:name="com.huawei.android.push.intent.RECEIVE" /> <!-- 可選,用於點擊通知欄或通知欄上的按鈕後觸發 onEvent 回調 --> <action android:name="com.huawei.android.push.intent.CLICK" /> <!-- 可選,查看 PUSH 通道是否串連,不查看則不需要 --> <action android:name="com.huawei.intent.action.PUSH_STATE" /> </intent-filter> </receiver>
如需使用混淆,則要添加相關混淆配置:
如採用的是 AAR 接入方式,需要 添加 mPaaS 混淆規則。
如採用其他接入方式,則無需添加。
測試華為推送
接入華為推送後,您可以在華為手機上啟動應用並確保調用了初始化方法(參見 訊息推送初始化),推送 SDK 會自動擷取華為推送的廠商 token 並上報。
您可以在殺掉應用進程的情況下推送測試訊息:
如果仍然能收到訊息,說明您的應用成功接入華為推送。
如果不能收到訊息,請按照下文進行問題排查。
排查問題
檢查華為配置和參數是否和華為推送後台一致:
接入 HMS2 請檢查
AndroidManifest.xml
中相關配置是否添加,com.huawei.hms.client.appid
是否和華為推送後台一致。接入 HMS5 請檢查
agconnect-services.json
是否存在,存放位置是否正確。
檢查 mPaaS 控制台是否開啟了華為通道(參見 配置華為推送渠道),以及相關配置是否和華為推送後台一致。
查看 logcat 日誌進行排查:
選擇 push 進程,過濾
mPush.PushProxyFactory
,檢查是否存在以下日誌:D/mPush.PushProxyFactory: found proxy com.mpaas.push.external.hms.Creator (HMS2) D/mPush.PushProxyFactory: found proxy com.mpaas.push.external.hms5.Creator (HMS5)
若無,說明添加 推送 - 華為2 或 推送 - HMS5 組件可能存在問題,請確認是否正確添加。
選擇主進程,過濾
mHMS
,檢查是否擷取到了華為推送的廠商 token,如出現日誌get token failed
:說明擷取華為廠商 token 失敗,錯誤碼參見 華為推送錯誤碼。選擇主進程,過濾
report channel token
, 檢查上報華為廠商 token 是否成功,如出現以下日誌:report channel token error: xxxx
說明上報廠商 token 失敗,請檢查 mPaaS 設定檔 的
base64Code
是否有值,以及擷取設定檔時上傳的 apk 簽名和當前應用是否一致。
其他問題
對 EMUI 和華為行動服務是否有版本限制
對 Emotion UI(簡稱 EMUI,是華為基於 Android 進行開發的情感化作業系統)和華為行動服務有版本限制,詳細版本要求請參見 裝置接收華為推送訊息的條件。
華為手機無法列印日誌
在手機撥號介面輸入 *#*#2846579#*#* 進入工程菜單 > 後台設定 > LOG 設定 > 選中 AP 日誌。重啟手機後,logcat 開始生效。