消息服务MNS的主题支持移动推送,即发送到主题里的消息可以同时被阿里云的移动推送服务推送到移动端。本文介绍在控制台上将消息推送至移动端的具体步骤,并提供相应的示例代码。

前提条件

您已完成以下操作:

创建主题

使用消息服务MNS创建一个主题,在以下的示例中命名为MyTopic。

  1. 登录消息服务MNS控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击主题
  4. 主题页面的右上角,单击创建主题
  5. 创建主题对话框,输入主题名称,输入消息最大长度,然后单击确定

创建移动推送订阅

  1. 主题页面,找到MyTopic主题,在其操作列单击订阅详情
  2. 在展开区域的右上角,单击创建订阅创建订阅
  3. 创建订阅对话框中,执行以下操作,然后单击确定
    • 推送类型:选择移动推送
    • 订阅名称:输入订阅的名称。
    • 接收端地址:输入移动端App在阿里云移动推送服务注册的ID。
    • 消息过滤标签:输入标签用于消息过滤。
    • 重试策略:选择重试策略,决定向接收端推送消息时的重试策略。
    • 消息推送格式:选择消息推送格式。

发布消息

  1. 主题页面,找到MyTopic,在其右侧操作列单击发布消息
  2. 发布消息页面,执行以下操作,然后单击发布消息
    1. 消息内容:输入待发布消息的正文。
    2. 推送类型:选中移动推送
    3. 移动推送设置对话框,执行相关操作,然后单击确定

      详细的参数说明请参见推送高级接口

    4. 消息过滤标签:输入消息标签。

Java SDK订阅代码示例

此外,您也可以通过SDK将消息推送至移动端。下文以Java SDK为例说明。

Endpoint的格式为push:{APP_KEY},其中{APP_KEY}是移动端App在阿里云移动推送服务注册的ID。

try {
        String topicName = TOPICNAME;
        TopicMeta meta = new TopicMeta();
        meta.setTopicName(topicName);

        CloudTopic topic = client.createTopic(meta);
        String pushEndpoint = topic.generatePushEndpoint("XXXX");

        SubscriptionMeta subMeta = new SubscriptionMeta();
        subMeta.setSubscriptionName(SUBNAME);
        subMeta.setNotifyStrategy(SubscriptionMeta.NotifyStrategy.EXPONENTIAL_DECAY_RETRY);
        subMeta.setEndpoint(pushEndpoint);
        topic.subscribe(subMeta);

        RawTopicMessage msg = new RawTopicMessage();
        msg.setMessageBody("hello topic");

        MessageAttributes messageAttributes = new MessageAttributes();
        PushAttributes pushAttributes = new PushAttributes();
        pushAttributes.setTarget(PushAttributes.PushTarget.ALL);
        pushAttributes.setTargetValue("ALL");
        pushAttributes.setDeviceType(PushAttributes.PushDeviceType.ALL);
        pushAttributes.setTitle("JavaSDK");
        pushAttributes.setBody("Hello From JavaSDK");
        pushAttributes.setPushType(PushAttributes.PushType.MESSAGE);
        pushAttributes.setParam("AndroidOpenType", "APPLICATION");
        messageAttributes.setPushAttributes(pushAttributes);

        topic.publishMessage(msg, messageAttributes);
} catch (ServiceException se) {
        System.out.println(se.getErrorCode() + se.getRequestId());
        System.out.println(se.getMessage());
        se.printStackTrace();
} catch (Exception e) {
        e.printStackTrace();
}         

其他语言的SDK详情,请参见SDK参考