對于已接入廠商通道,并且運行在對應廠商手機上的應用,服務端推送消息時默認優先推向廠商通道;對于其他應用,服務端推送消息時會推向自建通道。
自建通道收到消息后,推送 SDK 會自動發出通知,用戶點擊后可自動打開網頁。
重要推送 SDK 使用的通知 ID 從 10000 開始,請確保您使用的其他通知 ID 不會與之沖突。
廠商通道收到消息后手機系統會自動發出通知,推送 SDK 和開發者都無法干預,只有當用戶點擊通知后,推送 SDK 才能收到消息,并自動打開網頁,如需:
前提條件
本文中的
MPPushMsgServiceAdapter
方法僅適用于基線 10.1.68.32 及以上版本。若當前使用的基線版本低于 10.1.68.32,可參考 mPaaS 升級指南 升級基線版本。舊版本中的
AliPushRcvService
方法仍可繼續使用,如需查看舊版本文檔,可 單擊此處下載。
跳轉應用內頁面
如需跳轉到應用內的指定頁面,可以在推送消息的跳轉地址里填入自定義的 DeepLink,例如 mpaas://navigate
,同時在應用內設置一個路由 Activity 來接收 DeepLink,再分發到其他頁面。
路由 Activity 需要在 AndroidManifest.xml
中添加相應的 intent-filter
,例如:
<activity android:name=".push.LauncherActivity"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="mpaas" />
</intent-filter>
</activity>
路由 Activity 中獲取 URI 和消息:
Uri uri = intent.getData();
MPPushMsg msg = intent.getParcelableExtra("mp_push_msg");
自定義消息處理
如需處理消息,可以重寫 MPPushMsgServiceAdapter
的 onMessageReceive
和 onChannelMessageClick
方法:
public class MyPushMsgService extends MPPushMsgServiceAdapter {
/**
* 自建通道收到消息的回調(非廠商通道)
*
* @param msg 收到的消息
* @return 是否處理了消息:
* 返回 true,則 SDK 不會處理消息,開發者需根據需求處理收到的消息,包括發通知和通知點擊后的跳轉
* 返回 false,則 SDK 會自動發通知和添加通知點擊后的跳轉
*/
@Override
protected boolean onMessageReceive(MPPushMsg msg) {
Log.d("從自建通道收到消息:" + msg.toString());
// 處理消息,例如發自定義通知
return true;
}
/**
* 廠商通道的消息展示在通知欄,通知被點擊后的回調
*
* @param msg 收到的消息
* @return 是否處理了消息的點擊:
* 返回 true,則 SDK 不會處理廠商通道的通知點擊,開發者需根據需求處理點擊后的跳轉
* 返回 false,則 SDK 會自動處理通知點擊后的跳轉
*/
@Override
protected boolean onChannelMessageClick(MPPushMsg msg) {
Log.d("從廠商通道到的消息被點擊:" + msg.toString());
// 處理被點擊后的邏輯
return true;
}
}
其中 MPPushMsg
封裝了消息的所有參數:
String id = msg.getId(); // 消息 ID
boolean isSilent = msg.isSilent(); // 是否靜默消息
String title = msg.getTitle(); // 消息標題
String content = msg.getContent(); // 消息內容
String action = msg.getAction(); // 跳轉類型,0:URL;1:自定義 DeepLink
String url = msg.getUrl(); // 跳轉地址,URL 或 DeepLink
int pushStyle = msg.getPushStyle(); // 消息類型,0:普通消息,1:大文本消息,2:圖文消息
String iconUrl = msg.getIconUrl(); // 圖文消息的小圖標
String imageUrl = msg.getImageUrl(); // 圖文消息的圖片
String customId = msg.getCustomId(); // 自定義的消息 ID
String params = msg.getParams(); // 擴展參數
如處理消息后,可能還需要上報消息埋點,否則控制臺的推送使用分析將無法統計到正確的數據:
MPPush.reportPushOpen(msg); // 上報消息被打開
MPPush.reportPushIgnored(msg); // 上報消息被忽略
其中,對于自建通道的消息:
靜默消息,無需上報。
非靜默消息,需要上報被打開和被忽略的消息,可通過
Notification.Builder
的setContentIntent
、setDeleteIntent
方法或其他有效方式來監聽消息被用戶打開和忽略。
對于廠商通道的消息,無需上報。