對於已接入廠商通道,並且運行在對應廠商手機上的應用,服務端推送訊息時預設優先推向廠商通道;對於其他應用,服務端推送訊息時會推向自建通道。
自建通道收到訊息後,推送 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
方法或其他有效方式來監聽訊息被使用者開啟和忽略。
對於廠商通道的訊息,無需上報。