廠商消息分類
為了改善終端用戶推送體驗、營造良好可持續(xù)的通知生態(tài),各大廠商陸續(xù)對推送的消息根據(jù)分類進行限額限頻。
簡介
根據(jù)推送內(nèi)容對消息進行分類管理,可以自定義 Channel ID。
適用所有 Android 渠道
創(chuàng)建客戶端自定義渠道
推送時下發(fā)對應(yīng)的渠道 ID
參數(shù)名稱
類型
是否必填
示例
描述
channelId
String
否
channelId: "channelIdTest"
Android 通知 channelId
若需要下發(fā)廠商通道重要級別消息,請參考下文各個廠商消息分類的使用指南
華為分類
廠商針對消息分類的說明
根據(jù)消息內(nèi)容,華為推送將通知分類為 服務(wù)與通訊、資訊營銷 兩大類別,并對不同類別消息的提醒方式、消息樣式進行差異化管理,具體如下:
消息類型 | 服務(wù)與通訊 | 資訊營銷 |
推送內(nèi)容 | 包括社交通訊類消息和服務(wù)提醒類消息。 | 包括資訊類消息和營銷類消息,指的是運營人員向用戶發(fā)送的活動信息、內(nèi)容推薦、資訊等 |
提醒方式(EMUI 10.0及以上) | 鎖屏、鈴聲、振動 | 靜默通知,僅在下拉通知欄展示消息 |
消息樣式 | 文本+小圖 | 僅有文本 |
推送數(shù)量 | 不限量 | 自 2023.01.05 起,資訊營銷類消息根據(jù)應(yīng)用類型對每日推送數(shù)量進行上限管理,具體要求參見 不同應(yīng)用類別的推送數(shù)量上限要求 |
配置方式 | 需要向華為申請自分類權(quán)益,審核通過后將信任開發(fā)者提供的分類信息,消息不經(jīng)過智能分類。 | 默認 |
分類方式
消息智能分類
智能分類算法將根據(jù)您發(fā)送的內(nèi)容等多個維度因素,自動將您的消息按照分類標準進行歸類。
消息自分類
2021.07.01 起,華為推送服務(wù)開始接收開發(fā)者自分類權(quán)益的申請。申請成功后,允許開發(fā)者根據(jù)華為推送分類規(guī)范,自行對消息進行分類。
華為消息分類申請
自分類申請詳情參見 華為消息分類管理方案。
若應(yīng)用沒有自分類權(quán)益,則應(yīng)用的推送消息將通過智能分類進行自動歸類。
若應(yīng)用有自分類權(quán)益,將信任開發(fā)者提供的分類信息,消息不經(jīng)過智能分類。
在 mPaaS MPS 上對接華為消息分類傳參枚舉(thirdChannelCategory.hms)
傳參(String) | 含義 |
1 | IM:即時聊天 |
2 | VOIP:音視頻通話 |
3 | SUBSCRIPTION:訂閱 |
4 | TRAVEL:旅行類 |
5 | HEALTH:健康 |
6 | WORK:工作事項提醒 |
7 | ACCOUNT:賬號動態(tài) |
8 | EXPRESS:訂單&物流 |
9 | FINANCE:財務(wù) |
10 | DEVICE_REMINDER:設(shè)備提醒 |
11 | SYSTEM_REMINDER:系統(tǒng)提示 |
12 | MAIL:郵件 |
13 | PLAY_VOICE:語音播報(僅透傳消息支持) |
14 | MARKETING:內(nèi)容推薦、新聞、財經(jīng)動態(tài)、生活資訊、社交動態(tài)、調(diào)研、產(chǎn)品促銷、功能推薦、運營活動(僅對內(nèi)容進行標識,不會加快消息發(fā)送) |
傳參示例
參數(shù)名稱 | 類型 | 是否必填 | 示例 | 描述 |
thirdChannelCategory | Map | 否 | thirdChannelCategory: {"hms": "9"} | 示例傳值為“9”表示華為 FINANCE 財務(wù)類型消息。其他取值詳情請參見 廠商消息分類 |
榮耀分類
廠商針對消息分類的說明
根據(jù)消息內(nèi)容,華為推送將通知分類為 服務(wù)與通訊、資訊營銷 兩大類別,具體如下:
消息類型 | 服務(wù)與通訊 | 資訊營銷 |
推送內(nèi)容 | 包括社交通訊類消息和服務(wù)提醒類消息。 | 包括資訊類消息和營銷類消息,指的是運營人員向用戶發(fā)送的活動信息、內(nèi)容推薦、資訊等 |
提醒方式 | 鎖屏展示+下拉通知欄展示,支持鈴聲、震動 | 靜默通知,僅在下拉通知欄展示消息 |
消息樣式 | 文本+小圖 | 僅有文本 |
推送數(shù)量 | 不限量 | 資訊營銷類消息根據(jù)應(yīng)用類型對每日推送數(shù)量進行上限管理:
|
分類方式
消息智能分類
智能分類算法將根據(jù)您發(fā)送的內(nèi)容等多個維度因素,自動將您的消息按照分類標準進行歸類。
消息自分類
允許開發(fā)者根據(jù)消息分類規(guī)范,自行對消息進行分類。
在 mPaaS MPS 上對接榮耀消息分類傳參枚舉(thirdChannelCategory.honor)
傳參(String) | 含義 |
1 | 服務(wù)通訊類 |
2 | 資訊營銷類 |
傳參示例
參數(shù)名稱 | 類型 | 是否必填 | 示例 | 描述 |
thirdChannelCategory | Map | 否 | thirdChannelCategory: {"honor": "1"} | 示例傳值為“1”表示榮耀服務(wù)通訊類消息 |
小米消息分類
廠商針對消息分類的說明
根據(jù)《小米推送消息分類新規(guī)》,小米推送將消息分為 私信消息 和 公信消息 兩個類別,若應(yīng)用選擇不接入私信或公信,則會接入 默認 通道。
消息類型 | 默認 | 公信消息 | 私信消息 |
推送內(nèi)容 | 可按照小米的 公信場景說明 | 熱點新聞、新品推廣、平臺公告、社區(qū)話題、有獎活動等,多用戶普適性的內(nèi)容 | 聊天消息、個人訂單變化、快遞通知、交易提醒、IoT 系統(tǒng)通知等與私人通知相關(guān)的內(nèi)容 |
提醒方式 | 無 | 無 | 響鈴、震動 |
推送數(shù)量限制 | 1 倍 | 2-3 倍,具體規(guī)則請參見“公信限制規(guī)則 | 不限量 |
用戶接收數(shù)量限制 | 單個應(yīng)用單個設(shè)備單日 1 條 | 單個應(yīng)用單個設(shè)備單日 5-8 條 | 不限量 |
申請方式 | 無需申請 | 需在小米推送平臺申請,詳情請參見 channel 申請及接入方式 |
小米消息分類申請
申請方式請參見小米官方文檔 channel 申請及接入方法。
在 mPaaS MPS 上對接小米消息分類傳參示例
參數(shù)名稱 | 類型 | 是否必填 | 示例 | 描述 |
miChannelId | String | 否 | miChannelId:"miChannelIdTest" | 小米廠商推送渠道的 channelId |
OPPO 消息分類
廠商針對消息分類的說明
消息類型 | 私信 | 公信 |
推送內(nèi)容 | 針對用戶有一定關(guān)注度,且希望能及時接收的信息,如即時聊天信息、個人訂單變化、快遞通知、訂閱內(nèi)容更新、評論互動、會員積分變動等。 | 公信是針對用戶關(guān)注度不高,且對于接收這類信息并無心理預(yù)期,如熱點新聞、新品推廣、平臺公告、社區(qū)話題、有獎活動等,多用戶普適性的內(nèi)容 |
推送數(shù)量限制 | 不限量 | 有公信類通道共享推送次數(shù),當日達到推送量限制后,所有公信類通道將不能再推送消息; 推送限量:當累計用戶數(shù)<50000時,按100000計算;當累計用戶數(shù)≥50000時,按累計用戶數(shù)*2計算 |
單用戶推送限制(條/日) | 不限量 |
|
配置方式 |
| 默認開通 |
OPPO 私信通道申請
私信申請郵件通過后,需要在 OPPO 推送平臺 上登記該通道,并將通道對應(yīng)屬性設(shè)置為 私信
在 mPaaS MPS 上對接 OPPO 消息分類傳參示例
參數(shù)名稱 | 類型 | 是否必填 | 示例 | 描述 |
channelId | String | 否 | channelId:"channelIdTest" | OPPO 私信通道 channelId |
vivo 消息分類
廠商針對消息分類的說明
通知開啟的有效用戶:應(yīng)用集成的 push-sdk 訂閱成功,且設(shè)備近 14 天內(nèi)有聯(lián)網(wǎng)的通知權(quán)限開啟用戶。
通知開啟有效用戶數(shù)<10000,則運營消息量級默認為 10000。
通知開啟的有效用戶數(shù)及可發(fā)送運營消息量級,可在推送運營后臺查詢。
推送限額數(shù)以 到達量 計算,當日到達量超限則計入管控。
消息類型 | 系統(tǒng)消息 | 運營消息 |
推送內(nèi)容 | 用戶需要及時知道的消息,如:即時消息、郵件、用戶設(shè)置的提醒、物流等通知 | 用戶關(guān)注程度較低的消息,如:內(nèi)容推薦、活動推薦、社交動態(tài)等通知 |
通知欄權(quán)限 |
|
|
推送數(shù)量限制 | 3 倍通知開啟有效用戶數(shù)(可郵件申請消息不限量權(quán)限,詳見 推送消息限制說明) |
|
用戶接收數(shù)量限制 | 無限制 |
|
在 mPaaS MPS 上對接 vivo 二級消息分類傳參枚舉(thirdChannelCategory.vivo)
傳參(String) | 含義 |
1 | IM 用戶間點對點聊天消息(私信、群聊等),包括聊天消息中的圖片、文件傳輸、音頻(或視頻)通話,不包括未關(guān)注人的私信、官方號或者商家批量推送給用戶的私信或廣告。以及郵件提醒。 |
2 | ACCOUNT 賬號變動:賬號上下線、狀態(tài)變化、信息認證、會員到期、續(xù)費提醒、余額變動等。 資產(chǎn)變動:賬戶下的真實資產(chǎn)變動,交易提示、話費余額、流量、語音時長、短信額度等典型運營商提醒。 |
3 | TODO 與個人日程安排相關(guān),需要提醒用戶需要處理某件事項。
|
4 | DEVICE_REMINDER
|
5 | ORDER 電商購物、美食團購等各類商品服務(wù)中的訂單相關(guān)信息,推送對象為用戶。
|
6 | SUBSCRIPTION 用戶主動訂閱關(guān)注,并有預(yù)期在特定時機接收到消息:
重要 申請訂閱類消息需要滿足如下條件并提供完整證明:
|
7 | NEWS 新近發(fā)生的、有價值的事實新聞內(nèi)容。 |
8 | CONTENT 內(nèi)容型的信息推薦,包含熱搜、點評、廣告、書籍、音樂、視頻、直播、課程、節(jié)目、游戲宣傳、社區(qū)話題等。以及:
|
9 | MARKETING
|
10 | SOCIAL
|
在 mPaaS MPS 上對接 vivo 消息分類傳參示例
參數(shù)名稱 | 類型 | 是否必填 | 示例 | 描述 |
classification | String | 否 | classification:"1" | 用于傳遞 vivo 推送通道的消息類型:
不填則默認為 1 |
thirdChannelCategory | Map | 否 | thirdChannelCategory: {"vivo": "1"} | 示例傳值為“1”表示vivo IM 類型消息 |
classification 參數(shù)傳“0”代表運營消息,不經(jīng)過智能分類二次修正,直接從運營消息總量扣除額度,并受用戶接收條數(shù)限制的頻控。
classification 參數(shù)傳“1”代表系統(tǒng)消息,經(jīng)過智能分類二次修正,若智能分類識別出不是系統(tǒng)消息,會自動修正為運營消息,并扣除運營消息額度;若識別為系統(tǒng)消息,則從系統(tǒng)消息總量扣除額度。
MPS 對接廠商消息分類 Java 示例代碼
廠商消息分類推送參數(shù)推薦都上傳,MPS 會根據(jù)設(shè)備類型進行對應(yīng)廠商分類參數(shù)的封裝。
DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
// 創(chuàng)建 DefaultAcsClient 實例并初始化
// 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進行API訪問或日常運維。
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
// 本示例以將AccessKey ID和AccessKey Secret保存在環(huán)境變量為例說明。您也可以根據(jù)業(yè)務(wù)需要,保存到配置文件里。
// 建議先完成環(huán)境變量配置
String accessKeyId = System.getenv("MPAAS_AK_ENV");
String accessKeySecret = System.getenv("MPAAS_SK_ENV");
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou", // 地域 ID
accessKeyId,
accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
// Create an API request and set parameters
PushSimpleRequest request = new PushSimpleRequest();
request.setAppId("ONEX570DA89211721");
request.setWorkspaceId("test");
request.setTaskName("測試任務(wù)");
request.setTitle("測試");
request.setContent("測試");
request.setDeliveryType(3L);
Map<String,String> extendedParam = new HashMap<String, String>();
extendedParam.put("key1","value1");
request.setExtendedParams(JSON.toJSONString(extendedParam));
request.setExpiredSeconds(300L);
request.setPushStyle(2);
String imageUrls = "{\"defaultUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"oppoUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"miuiUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"fcmUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"iosUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\"}";
String iconUrls = "{\"defaultUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"hmsUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"oppoUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"miuiUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\"}";
request.setImageUrls(imageUrls);
request.setIconUrls(iconUrls);
request.setStrategyType(2);
request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
Map<String,String> target = new HashMap<String, String>();
String msgKey = String.valueOf(System.currentTimeMillis());
target.put("user1024",msgKey);
request.setTargetMsgkey(JSON.toJSONString(target));
//廠商消息分類字段
//封裝VIVO消息分類一級分類
request.setClassification("1");
//封裝華為消息分類、榮耀消息分類和VIVO消息分類二級分類
Map<String, String> map = new HashMap<>();
map.put("hms", "2");
map.put("vivo", "3");
map.put("honor", "1");
pushSimpleReq.setThirdChannelCategory(map);
//封裝小米消息分類
pushSimpleReq.setMiChannelId("miChannelIdTest);
//封裝OPPO消息分類
pushSimpleReq.setChannelId("channelIdTest");
// Initiate the request and handle the response or exceptions
PushSimpleResponse response;
try {
response = client.getAcsResponse(request);
System.out.println(response.getResultCode());
System.out.println(response.getResultMessage());
} catch (ClientException e) {
e.printStackTrace();
}