1. 程式人生 > 實用技巧 >主題訂閱推送助力雙十一預約搶購

主題訂閱推送助力雙十一預約搶購

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

作者:胡椒