想讓使用者“一見鍾情”,你需要主題訂閱訊息精準推送

華為開發者論壇發表於2021-08-11

現今智慧終端 App越來越多,各個 App推送的資訊量急速擴張,如何讓自己推送的資訊精準抓住使用者的視線,在市場競爭中佔據高地?其中一個答案就是——主題訂閱訊息推送。

主題訂閱訊息推送可以根據使用者習慣或讓使用者自定義感興趣主題,應用再根據需要撰寫主題訊息,推送服務負責將訊息可靠地傳送至正確的裝置,從而實現精準推送。

例如,某個天氣預報應用的使用者可選擇加入“ X市天氣”主題,並接收關於本地天氣的通知。

華為主題訂閱訊息推送服務具有穩定、及時、高效的特點,多種推送樣式、自動推送通知、 Deep linking能夠助力應用精準觸達使用者,有效提升使用者活躍度和粘度。

接下來,我們詳細解析如何整合 華為主題訂閱訊息推送服務

一、整體開發流程

Step1 :應用 App主題訂閱;

Step2 :向訂閱主題的使用者傳送訊息;

Step3 :驗證主題訂閱訊息成功送達。


服務端主題訂閱推送訊息互動流程圖


主題訂閱有兩種實現方式:App客戶端主題訂閱和服務端主題訂閱。本文將分別詳細介紹這兩種訂閱方式的實現步驟及程式碼。


二、整合關鍵步驟說明和程式碼實現

(一)客戶端主題訂閱

客戶端主題訂閱程式碼實現:

public void subtopic(View view) {
    String SUBTAG = "subtopic";
    String topic = "weather";
    try {
        // 主題訂閱
    HmsMessaging.getInstance(PushClient.this).subscribe(topic).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.i(SUBTAG, "subscribe topic weather successful");
                } else {
                    Log.e(SUBTAG, "subscribe topic failed,return value is" + task.getException().getMessage());
                }
            }
        });
    } catch (Exception e) {
        Log.e(SUBTAG, "subscribe faied,catch exception:" + e.getMessage());
    }
}

App 端測自定義訂閱介面:

主題訂閱取消程式碼實現:

public void unsubtopic(View view) {
    String SUBTAG = "unsubtopic";
    String topic = "weather";
    try {
        // 主題訂閱
        HmsMessaging.getInstance(PushClient.this).unsubscribe(topic).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.i(SUBTAG, "unsubscribe topic successful");
                } else {
                    Log.e(SUBTAG, "unsubscribe topic failed,return value is" + task.getException().getMessage());
                }
            }
        });
    } catch (Exception e) {
        Log.e(SUBTAG, "subscribe faied,catch exception:" + e.getMessage());
   }
}

App 端測自定義取消訂閱介面:


(二) 服務端主題訂閱

1 、獲取 Access Token 呼叫華為帳號伺服器的介面( ),獲取應用級鑑權憑證 Access Token

1)請求訊息:

POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
 
grant_type=client_credentials&
client_id=<APP ID >&
client_secret=<APP secret >

2)獲取 Access Token請求訊息實戰演示:

2 、主題訂閱與退訂。 伺服器呼叫服務端主題訂閱 API或主題退訂 API進行應用主題訂閱或退訂,實現對應用主題的管理。主題訂閱與退訂的區別在於介面地址稍有不同,請求訊息頭和訊息體均為一直,具體如下:

1)主題訂閱介面:

https: //push-api.cloud.huawei.com/v1/[appid]/topic:subscribe

2)主題取消訂閱介面:

https: //push-api.cloud.huawei.com/v1/[appid]/topic:unsubscribe

3)請求訊息頭示例,此處 Bearer Token為上一步獲取的 Access Token

Authorization: Bearer CV0kkX7yVJZcTi1i+uk…Kp4HGfZXJ5wSH/MwIriqHa9h2q66KSl5
Content-Type: application/json

4 )請求訊息體示例:

{
    "topic": "weather",
    "tokenArray": [
        "AOffIB70WGIqdFJWJvwG7SOB...xRVgtbqhESkoJLlW-TKeTjQvzeLm8Up1-3K7",
        "AKk3BMXyo80KlS9AgnpCkk8l...uEUQmD8s1lHQ0yx8We9C47yD58t2s8QkOgnQ"
    ]
}

5 )請求訊息實戰演示:

(三) 傳送主題訊息

當建立完主題後,就可以根據主題傳送訊息,當前支援基於 HTTPS協議進行主題訊息傳送。基於 HTTPS協議示例報文如下:

{
    "validate_only": false,
    "message": {
        "notification": {
            "title": "message title",
            "body": "message body"
        },
        "android": {
            "notification": {
                "click_action": {
                    "type": 1,
                    "action": "com.huawei.codelabpush.intent.action.test"
                }
            }
        },
        "topic": "weather"
    }
}

App 客戶端測展示收到的推送訊息:

三、主題訂閱訊息注意事項

  •    客戶端應用可以訂閱任何現有主題,也可建立新主題。當客戶端應用訂閱新的主題名稱尚不存在時,推送服務會使用這個名稱建立一個新主題,隨後任何客戶端都可訂閱該主題。

  •    推送服務端給您提供了基本的主題管理 API,支援一次 1000個以內的 Token訂閱或者退訂某個主題,同時每個應用最多隻能存在 2000個不同的主題。

  •    主題與 Token的訂閱關係生效需等待一分鐘,待訂閱關係生效後,可以透過指向 Topic或者組合 Topic條件的方式實現訊息批次傳送。

>> 華為開發者聯盟官網

>> 獲取開發指導文件
>> 參與開發者討論請到 CSDN社群 或者 Reddit 社群
>> 下載 demo 和示例程式碼請到 Github 或者 Gitee
>> 解決整合問題請到 Stack Overflow


原文連結: https://developer.huawei.com/consumer/cn/forum/topic/0202580456687810024?fid=18

原作者:胡椒

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2786453/,如需轉載,請註明出處,否則將追究法律責任。

相關文章