MNS消息服务
MNS消息服务在功能上可以大致分为队列和主题两大块,其中队列功能是提供一对一的传统消息队列中间件服务,主题功能是提供一对多的的广播消息服务。
多样的推送方式
MNS的主题功能可以支持将一条消息以多种方式广播到用户的终端。MNS的主题功能不仅支持广播到用户的HttpServer,也支持推送到用户的MNS队列里,还支持通过短信、邮件的方式做推送。现在,主题功能也支持通过移动推送直接将消息广播到用户的App终端。
未来我们也会根据广播推送的场景做更多的有机结合:比如用户可以在一条消息里同时指定推送App和推送短信分别的展示内容,然后在推送App不可达时改为推送短信;再比如比较常见的监控报警场景,一条报警消息可以被通过多种途径发出去等。
移动推送的具体使用
MNS的主题功能对移动推送的支持,是通过阿里云的RAM授权使用了阿里云的移动推送这个产品,所以用户需要先开通“移动推送”。
开通移动推送
- 创建App:在移动推送控制台(https://push.console.aliyun.com/ )的App列表页,点击页面右上角的“创建APP”按钮即可创建一个新的App。
配置App:App创建成功后,强烈建议您去配置app。在APP详情页点击配置应用。
- Android配置: 勾选Android,并填入PackageName,包名需要与您的代码中的applicationID保持一致。请务必确保您创建的不同应用具有不同的PackageName,阿里云移动推送Android SDK以PackageName作为路由依据,不同应用配置相同包名,可能导致消息错误发送,即与目标应用有相同包名的应用接收到推送消息。
- iOS配置: 勾选iOS,上传证书并填写证书对应的密码,注意 开发证书和生产证书 不要弄混淆,关于证书的获取与配置,请参见 iOS 推送证书设置指南
- 在APP列表点击应用证书按钮即可查看该应用的Appkey和Secret。
- 在APP列表页下载App端需要集成的SDK
配置SDK
- iOS 版 SDK 请参考文档:iOS SDK QuickStart
- Android 版 SDK 请参考文档:Android SDK QuickStart
- 安装配置好的App到终端手机
MNS控制台体验流程
创建移动推送订阅
- 在MNS控制台创建Topic
- 进入Topic的"订阅详情"
创建订阅
发送消息 (PublishMessage)
- 进入Topic列表页面
- 向Topic发送消息
- 配置移动推送消息的相关属性
移动推送的具体属性可以参考 这里
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();
}
如果您在使用过程中遇到了什么问题,或者有什么想法愿意一起交流,请站内信或者工单联系我们~