本文介紹如何快速將消息推送組件接入到 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 及以上版本中有效。
初始化。初始化推送服務,建立客戶端和移動推送網關之間的長連接,這個長連接由推送 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。
綁定用戶 ID。此用戶 ID 由開發者自定義,既可以是真實用戶系統的用戶標識,也可以是能和每個用戶形成映射關系的其他參數,例如賬號、手機號等。
在收到 token 后,可以將 token 和用戶 ID 綁定:
String userId = "自定義 userId"; ResultPbPB bindResult = MPPush.bind(context, userId, token); Log.d("綁定 userId " + (bindResult.success ? "成功" : ("錯誤:" + bindResult.code)));
如已調用
MPLogger
設置過用戶 ID,可以在綁定時不傳入用戶 ID,例如:MPLogger.setUserId("自定義 userId"); ResultPbPB bindResult = MPPush.bind(context, token);
如需解綁用戶 ID,例如用戶退出登錄,可調用:
ResultPbPB unbindResult = MPPush.unbind(context, userId, token); ResultPbPB unbindResult = MPPush.unbind(context, token);
完成此步驟后,即可在控制臺通過用戶維度推送消息,需要填寫的用戶標識就是自定義的用戶 ID。
(可選)綁定用戶手機號。
重要目前,僅杭州非金融區提供短信補充服務。
在收到 token 后,還可以將 token 和用戶的手機號碼綁定,同時將 token 與用戶 ID 和手機號綁定。綁定手機號碼后,用戶就可以通過該手機號碼收到相關推送短信。
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 接口,推送消息。具體內容請參考 配置服務端。