1.前言
主題訂閱推送是指給訂閱了不同主題的用戶推送不同的消息,比如攝影、運動、美食等。為了提高用戶活躍以及留存,我們希望根據用戶的關注主題,推送不同的消息,比如,關注了運動的用戶,我們推送運動相關的資訊,做到推送因人而異,推送用戶真正感興趣的消息。
2.業務背景介紹
雙十一各家電商平台都推出了各種預約搶購活動(如下圖所示),商家借助推送能夠及時的把優惠信息送到用戶的手機里,但不是所有的用戶都對商品感興趣,鋪天蓋地的推送反而會讓用戶產生反感,主題推送讓用戶自己選擇感興趣的商品,做到精准及時的推送。
3.整體流程
4.集成關鍵步驟說明和代碼
(1)集成push sdk
Push sdk的集成文檔上有詳細的說明這里不做展開,詳情可以參考https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/service-introduction-0000001050040060-V5
(2)配置自動初始化token
配置自動初始化后,每次打開應用token就會從onNewToken回調返回,主題推送不依賴token來進行推送,但端測仍然要首先獲取token。
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="true"/>
(3)把商品的id作為topic
用戶點擊預約搶購時,調用subscribe方法訂閱主題
/**
* to subscribe to topics in asynchronous mode.
*/
private void addTopic(String topic) {
try {
HmsMessaging.getInstance(MainActivity2.this)
.subscribe(topic)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {
if (task.isSuccessful()) {
Log.i(TAG, "subscribe Complete");
changToCancelAppointment();
isAppointment = true;
showLog("subscribe successful");
} else {
isAppointment = false;
changeToAppointment();
showLog("subscribe failed: ret=" + task.getException().getMessage());
}
}
});
} catch (Exception e) {
isAppointment = false;
changeToAppointment();
showLog("subscribe failed: exception=" + e.getMessage());
}
}
(4)服務端調用下行消息接口
用商品的topic推送消息,下面用postman來模擬發送消息推送報文如下:
(5)當一個用戶預約了一款手表的預售,他可能就會對相同價位相同款式的其他手表有購買需求,我們可以將這幾款手表的預售信息作為一組推送給用戶,通過condition組合"condition": "'watch123456' in topics || 'watch321654' in topics || 'watch321684' in topics" 用戶如果訂閱了watch123456 watch32165 watch321684這三款手表中的一個,另外兩款手表的發售信息也會推送給用戶。
(6)當用戶取消預約這款手表的發售時,可以調用unsubscribe方法取消預訂,取消后就不會再接收這款手表的發售信息
/**
* to unsubscribe to topics in asynchronous mode.
*/
private void deleteTopic(String topic) {
try {
HmsMessaging.getInstance(MainActivity2.this)
.unsubscribe(topic)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {
if (task.isSuccessful()) {
showLog("unsubscribe successful");
changeToAppointment();
isAppointment = false;
} else {
isAppointment = true;
showLog("unsubscribe failed: ret=" + task.getException().getMessage());
changToCancelAppointment();
}
}
});
} catch (Exception e) {
showLog("unsubscribe failed: exception=" + e.getMessage());
isAppointment = true;
changeToAppointment();
}
}
5.效果展示
6.其他
主題消息傳遞不限制每個主題的訂閱數。但是,Push Kit有如下限制:
(1)一個應用實例不可訂閱超過2000個主題。
(2)在EMUI 10.0以上的華為設備要求HMS Core(APK)的版本不低於3.0.0。低於EMUI 10.0的華為設備上要求HMS Core(APK)的版本不低於4.0.3,高版本的HMS Core(APK)補齊了低版本EMUI缺失的功能。
(3)同時進行推送的主題數,不能超過100個。
原文鏈接:
https://developer.huawei.com/consumer/cn/forum/topic/0204404702328700205?fid=18
作者:胡椒