消息服务支持移动推送

MNS消息服务

MNS消息服务在功能上可以大致分为队列和主题两大块,其中队列功能是提供一对一的传统消息队列中间件服务,主题功能是提供一对多的的广播消息服务。

多样的推送方式

MNS的主题功能可以支持将一条消息以多种方式广播到用户的终端。MNS的主题功能不仅支持广播到用户的HttpServer,也支持推送到用户的MNS队列里,还支持通过短信、邮件的方式做推送。现在,主题功能也支持通过移动推送直接将消息广播到用户的App终端。

未来我们也会根据广播推送的场景做更多的有机结合:比如用户可以在一条消息里同时指定推送App和推送短信分别的展示内容,然后在推送App不可达时改为推送短信;再比如比较常见的监控报警场景,一条报警消息可以被通过多种途径发出去等。

移动推送的具体使用

MNS的主题功能对移动推送的支持,是通过阿里云的RAM授权使用了阿里云的移动推送这个产品,所以用户需要先开通“移动推送”。

开通移动推送

  1. 创建App:在移动推送控制台(https://push.console.aliyun.com/ )的App列表页,点击页面右上角的“创建APP”按钮即可创建一个新的App。
    消息服务支持移动推送
  2. 配置App:App创建成功后,强烈建议您去配置app。在APP详情页点击配置应用。

    • Android配置: 勾选Android,并填入PackageName,包名需要与您的代码中的applicationID保持一致。请务必确保您创建的不同应用具有不同的PackageName,阿里云移动推送Android SDK以PackageName作为路由依据,不同应用配置相同包名,可能导致消息错误发送,即与目标应用有相同包名的应用接收到推送消息。
    • iOS配置: 勾选iOS,上传证书并填写证书对应的密码,注意 开发证书和生产证书 不要弄混淆,关于证书的获取与配置,请参见 iOS 推送证书设置指南
      消息服务支持移动推送
  3. 在APP列表点击应用证书按钮即可查看该应用的Appkey和Secret。
    消息服务支持移动推送
  4. 在APP列表页下载App端需要集成的SDK
    消息服务支持移动推送
  5. 配置SDK

  6. 安装配置好的App到终端手机

MNS控制台体验流程

创建移动推送订阅
  1. 在MNS控制台创建Topic
    消息服务支持移动推送
  2. 进入Topic的"订阅详情"
    消息服务支持移动推送

消息服务支持移动推送

  1. 创建订阅
    消息服务支持移动推送

发送消息 (PublishMessage)
  1. 进入Topic列表页面
  2. 向Topic发送消息
    消息服务支持移动推送
  3. 配置移动推送消息的相关属性
    消息服务支持移动推送

移动推送的具体属性可以参考 这里
消息服务支持移动推送

Java代码示例

MNS的JavaSDK在这里

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();
} 

如果您在使用过程中遇到了什么问题,或者有什么想法愿意一起交流,请站内信或者工单联系我们~

上一篇:119-将Java-Kotlin项目打包成jar包并在另一个项目中使用


下一篇:物联网、大数据将改变医疗