文档管理中心
我的

此版本文档已归档不再维护,推荐您使用最新版本。

指南推送服务应用开发(已归档)按主题发送消息(已归档)

按主题发送消息

HUAWEI Push Kit主题消息传递功能可让您将消息发送至已经选择加入特定主题的多台设备。您可以根据需要撰写主题消息,HUAWEI Push负责将消息可靠地传送至正确的设备。

例如,某个天气预报应用的用户可选择加入“天气”主题,并接收关于本地最佳除害虫天气的通知。喜欢旅游的用户可以订阅一些旅游线路,旅游指南等旅游信息。

关于主题,请注意以下事项:

  • 主题消息传递最适合传递天气或其他可通过公开途径获得的信息。

  • 主题消息传递不限制每个主题的订阅数。但是,HUAWEI Push在这些方面有如下约束限制:

  1. 一个应用实例不可订阅超过2000个主题。

  2. 该功能仅在EMUI版本不低于10.0的华为设备上支持。

  3. HMS Core(APK)的版本不低于3.0.0。

开发者要实现按主题发送消息的功能需要完成如下开发步骤:

  1. 应用主题订阅,既支持客户端订阅,详细请参考客户端主题管理开发指导,同时也支持服务端主题订阅,详细请参考服务端主题管理开发指导。

  2. 当你订阅完主题后,就可以根据主题发送消息,详细请参考发送主题消息开发指导。

1. 客户端主题管理开发指导

客户端应用可以订阅任何现有主题,也可创建新主题。当客户端应用订阅新的主题名称尚不存在时,系统会在HUAWEI Push中使用这个名称创建一个新主题,随后任何客户端都可订阅该主题。

若要订阅某个主题,客户端应用需使用 HMS Core Push SDK的 HmsMessaging.subscribe 方法。此方法会返回一个Task,完成侦听器可以使用它来确定订阅是否成功。

收起
自动换行
深色代码主题
复制
  1. public void subscribe(String topic) {
  2.    try {
  3.        HmsMessaging.getInstance(context).subscribe(topic).addOnCompleteListener(new OnCompleteListener<Void>() {
  4.            @Override
  5.            public void onComplete(Task<Void> task) {
  6.                if (task.isSuccessful()) {
  7.                    Log.i(TAG, "subscribe Complete");
  8.                } else {
  9.                    Log.e(TAG, "subscribe failed: ret=" + task.getException().getMessage());
  10.                }
  11.            }
  12.        });
  13.    } catch (Exception e) {
  14.        Log.e(TAG, "subscribe failed: exception=" + e.getMessage());
  15.    }
  16. }

若要退订,客户端应用需使用HMS Core Push SDK的 HmsMessaging.unsubscribe 方法。

收起
自动换行
深色代码主题
复制
  1. public void unsubscribe(String topic) {
  2.    try {
  3.        HmsMessaging.getInstance(context).unsubscribe(topic).addOnCompleteListener(new OnCompleteListener<Void>() {
  4.            @Override
  5.            public void onComplete(Task<Void> task) {
  6.                if (task.isSuccessful()) {
  7.                    Log.i(TAG, "unsubscribe Complete");
  8.                } else {
  9.                    Log.e(TAG, "unsubscribe failed: ret=" + task.getException().getMessage());
  10.                }
  11.            }
  12.        });
  13.    } catch (Exception e) {
  14.        Log.e(TAG, "unsubscribe failed: exception=" + e.getMessage());
  15.    }
  16. }

2. 服务端主题管理开发指导

服务端主题管理API允许您从服务器端执行基本的主题管理任务,支持一次订阅/退订1000个以内的Token,同时每个开发者最多只能存在2000个不同的topic。完成订阅操作后,后续发送消息时就可以直接通过指向Topic或者组合Topic条件的方式实现消息批量发送。

开发者在服务器上实现主题管理功能,需要完成如下开发步骤:

1、开发者服务器获取接入令牌AccessToken,请参考开放平台鉴权-客户端密码模式。

2、开发者服务器调用Push服务端主题订阅API或主题退订API进行应用主题订阅或退订,实现对应用主题的管理。

主题订阅消息请求样例:

POST /v1/12345678/topic:subscribe HTTP/1.1

Host: push-api.cloud.huawei.com

Authorization: Bearer CV0kkX7yVJZcTi1i+uk…Kp4HGfZXJ5wSH/MwIriqHa9h2q66KSl5

Content-Type: application/json

收起
自动换行
深色代码主题
复制
  1. {
  2.    "topic": "weather",
  3.    "tokenArray": [
  4.        "AOffIB70WGIqdFJWJvwG7SOB...xRVgtbqhESkoJLlW-TKeTjQvzeLm8Up1-3K7",
  5.        "AKk3BMXyo80KlS9AgnpCkk8l...uEUQmD8s1lHQ0yx8We9C47yD58t2s8QkOgnQ"
  6.    ]
  7. }

主题退订消息请求样例:

POST /v1/12345678/topic:unsubscribe HTTP/1.1

Host: push-api.cloud.huawei.com

Authorization: Bearer CV0kkX7yVJZcTi1i+uk…Kp4HGfZXJ5wSH/MwIriqHa9h2q66KSl5

Content-Type: application/json

收起
自动换行
深色代码主题
复制
  1. {
  2.    "topic": "weather",
  3.    "tokenArray": [
  4.        "AOffIB70WGIqdFJWJvwG7SOB...xRVgtbqhESkoJLlW-TKeTjQvzeLm8Up1-3K7",
  5.        "AKk3BMXyo80KlS9AgnpCkk8l...uEUQmD8s1lHQ0yx8We9C47yD58t2s8QkOgnQ"
  6.    ]
  7. }

3. 发送主题消息开发指导

当创建完主题后,开发者就可以根据主题发送Push消息,当前华为推送支持基于HTTP协议进行主题消息发送。可以参考Push基础能力服务端开发指导进行功能开发。需要注意的是,基于HTTP协议开发时,消息发送Message结构体中需要指定发送的主题参数topic。

同时华为推送也支持向主题组合发送消息,即指定目标主题的condition条件表达式。此时需要注意的是,基于HTTP协议开发时,消息发送Message结构体中需要指定发送的主题参数condition。具体conditon条件表达式规范请参考服务端发送Push消息中关于Condition API的描述。