5

主题订阅消息推送,让用户不再错过重要信息

 3 years ago
source link: https://my.oschina.net/u/4956408/blog/5059015
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
主题订阅消息推送,让用户不再错过重要信息 - 华为移动服务的个人空间 - OSCHINA - 中文开源技术交流社区

现今智能终端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。调用华为帐号服务器的接口(https://oauth-login.cloud.huawei.com/oauth2/v3/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条件的方式实现消息批量发送。

>>访问华为推送服务官网,了解更多相关内容
>>获取华为推送服务开发指导文档
>>华为HMS Core官方论坛
>>华为推送服务开源仓库地址:GitHubGitee

点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK