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

前提条件

您已完成以下操作:
  • 开通移动推送服务。
  • 在移动推送服务,创建并配置应用。详见创建App
  • 在App列表页下载App端需要集成的SDK。详见下载SDK
  • 配置SDK
  • 安装配置好的App到终端手机。

创建主题

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

  1. 在控制台顶部菜单栏,选择对应地域(Region),如华东1(杭州)
  2. 在左侧导航栏,单击主题。在主题页面的右上角,单击创建主题
  3. 创建主题对话框中填写主题属性,单击确认

创建移动推送订阅

  1. 在控制台主题页面,找到MyTopic主题,并在其操作列单击订阅详情
  2. 在展开区域的右上角,单击创建订阅
  3. 在弹出的创建订阅对话框中,填写相应字段,单击确认

    其中,推送类型选择为移动推送;在接收端地址输入框中输入您移动端的App在阿里云移动推送服务的注册ID。

发布消息

  1. 主题页面,找到MyTopic并在其右侧操作列,单击发布消息
  2. 发布消息页面,执行以下操作:
    • 填写相关信息,推送类型选择为移动推送
    • 在弹出的移动推送设置对话框中,按需输入相关参数配置,单击确认

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

      移动推送配置

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参考