本文介紹如何快速將訊息推送組件接入到 Android 用戶端。訊息推送支援原生 AAR 和組件化(Portal & Bundle)兩種接入方式。
前提條件
已將 mPaaS 接入到工程。
若採用原生 AAR 方式接入,需要先 將 mPaaS 添加到您的專案中將 mPaaS 添加到專案。
已通過 mPaaS 控制台擷取
.config
設定檔。關於如何產生並下載設定檔,請參考 步驟 3 將設定檔添加到專案中將設定檔添加到專案。本文中的
MPPushMsgServiceAdapter
方法僅適用於基準 10.1.68.32 及以上版本。若當前使用的基準版本低於 10.1.68.32,可參考 mPaaS 10.1.68 升級指南mPaaS 升級指南 升級基準版本。說明舊版本中的
AliPushRcvService
方法仍可繼續使用,如需查看舊版本文檔,可 單擊此處下載。
操作步驟
要使用訊息推送服務,您需要完成以下接入步驟:
添加推送 SDK。添加推送 SDK 依賴和 AndroidManifest 配置。
添加 SDK 依賴。根據不同的接入方式進行相應的操作:
原生 AAR 方式:在工程中通過 組件管理(AAR)安裝 訊息推送(PUSH)組件。更多資訊,請參考 管理組件依賴(原生 AAR)管理組件依賴(原生 AAR)。
組件化方式:在 Portal 和 Bundle 工程中通過 組件管理 安裝 訊息推送(PUSH)組件。更多資訊,請參考 接入流程添加組件依賴。
添加
AndroidManifest
配置。在AndroidManifest.xml
中添加以下內容:說明如果是採用組件化方式接入,需要在 Portal 工程中添加
AndroidManifest
配置。<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <service android:name="com.alipay.pushsdk.push.NotificationService" android:enabled="true" android:exported="false" android:label="NotificationService" android:process=":push"> <intent-filter> <action android:name="${applicationId}.push.action.START_PUSHSERVICE" /> </intent-filter> </service> <receiver android:name="com.alipay.pushsdk.BroadcastActionReceiver" android:enabled="true" android:exported="true" android:process=":push"> <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> </intent-filter> </receiver>
推送 SDK 為了提高訊息的到達率,內建了進程保活功能,包括上述
com.alipay.pushsdk.BroadcastActionReceiver
監聽系統廣播喚起推送進程,以及進程回收後的自動重啟,接入時可以根據自身需求決定是否啟用這些功能:如不需要監聽系統啟動廣播,可刪除:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
如不需要監聽網路切換廣播,可刪除:
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
如不需要監聽使用者喚醒廣播,可刪除:
<action android:name="android.intent.action.USER_PRESENT" />
如不需要監聽充電狀態變化廣播,可刪除:
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
如不需要監聽上述所有廣播,可將
com.alipay.pushsdk.BroadcastActionReceiver
的android:enabled
屬性設定為 false 。如不需要推送進程回收後自動重啟,可在
application
節點下添加以下配置:<meta-data android:name="force.kill.push" android:value="on" />
說明該配置僅在基準版本 10.2.3.21 及以上版本中有效。
初始化。初始化推送服務,建立用戶端和Alibaba Cloud Mobile Push網關之間的長串連,這個長串連由推送 SDK 維護,即自建通道。
根據不同的接入方式進行相應的操作:
原生 AAR 方式
如已在
Application
中調用初始化 mPaaS,則在MP.init()
方法之後調用:MPPush.init(this);
如未調用 mPaaS 初始化方法,則在
Application
中調用:MPPush.setup(this); MPPush.init(this);
組件化方式
在
LauncherApplicationAgent
或LauncherActivityAgent
的postInit
方法中調用:MPPush.init(context);
建立 Service。建立 Service 繼承
MPPushMsgServiceAdapter
,重寫onTokenReceive
方法,接收自建通道下發的裝置標識(token)。public class MyPushMsgService extends MPPushMsgServiceAdapter { /** * 收到自建通道 token 的回調 * * @param token 自建通道 token */ @Override protected void onTokenReceive(String token) { Log.d("收到自建通道 token: " + token); } }
在
AndroidManifest.xml
中聲明該 Service:<service android:name="com.mpaas.demo.push.MyPushMsgService" android:exported="false"> <intent-filter> <action android:name="${applicationId}.push.action.MESSAGE_RECEIVED" /> <action android:name="${applicationId}.push.action.REGISTRATION_ID" /> <category android:name="${applicationId}" /> </intent-filter> </service>
完成此步驟後,就可以在控制台通過裝置維度推送訊息了,需要填寫的裝置標識就是收到的 token。
綁定使用者識別碼。此使用者識別碼 由開發人員自訂,既可以是真實使用者系統的使用者標識,也可以是能和每個使用者形成映射關係的其他參數,例如帳號、手機號等。
在收到 token 後,可以將 token 和使用者識別碼 綁定:
String userId = "自訂 userId"; ResultPbPB bindResult = MPPush.bind(context, userId, token); Log.d("綁定 userId " + (bindResult.success ? "成功" : ("錯誤:" + bindResult.code)));
如已調用
MPLogger
設定過使用者識別碼,可以在綁定時不傳入使用者識別碼,例如:MPLogger.setUserId("自訂 userId"); ResultPbPB bindResult = MPPush.bind(context, token);
如需解除綁定使用者識別碼,例如使用者退出登入,可調用:
ResultPbPB unbindResult = MPPush.unbind(context, userId, token); ResultPbPB unbindResult = MPPush.unbind(context, token);
完成此步驟後,即可在控制台通過使用者維度推送訊息,需要填寫的使用者標識就是自訂的使用者識別碼。
(可選)綁定使用者手機號。
重要目前,僅杭州非金融區提供簡訊補充服務。
在收到 token 後,還可以將 token 和使用者的手機號碼綁定,同時將 token 與使用者識別碼 和手機號綁定。綁定手機號碼後,使用者就可以通過該手機號碼收到相關推送簡訊。
String userId = "自訂 userId"; String phoneNumber = "138xxxxxxxx" ResultPbPB bindResult = MPPush.bind(context, userId, token,phoneNumber); Log.d("綁定 userId " + (bindResult.success ? "成功" : ("錯誤:" + bindResult.code)));
相關操作
為提升訊息推送的到達率,推薦接入 Android 手機廠商提供的推送通道,目前支援華為、小米、OPPO、vivo,具體操作參見 接入廠商通道。
收到訊息後會自動發送通知,使用者點擊通知可自動開啟網頁,如需根據自訂的 DeepLink 跳轉應用內頁面,或自訂收到訊息後的行為,請參見 通知點擊處理。
更多其他功能,參見 進階功能 說明文檔。
程式碼範例
點擊此處 下載範例程式碼包。
後續操作
接入完成後,可以通過服務端調用 RESTful 介面,推送訊息。具體內容請參考 佈建服務端。