MNS消息服务在功能上可以大致分为队列和主题两大块,其中队列功能是提供一对一的传统消息队列中间件服务,主题功能是提供一对多的的广播消息服务。
MNS的主题功能可以支持将一条消息以多种方式广播到用户的终端。MNS的主题功能不仅支持广播到用户的HttpServer,也支持推送到用户的MNS队列里,还支持通过短信、邮件的方式做推送。现在,主题功能也支持通过移动推送直接将消息广播到用户的App终端。
未来我们也会根据广播推送的场景做更多的有机结合:比如用户可以在一条消息里同时指定推送App和推送短信分别的展示内容,然后在推送App不可达时改为推送短信;再比如比较常见的监控报警场景,一条报警消息可以被通过多种途径发出去等。
MNS的主题功能对移动推送的支持,是通过阿里云的RAM授权使用了阿里云的移动推送这个产品,所以用户需要先开通“移动推送”。
配置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的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(); }如果您在使用过程中遇到了什么问题,或者有什么想法愿意一起交流,请站内信或者工单联系我们~
相关资源:基于MQTT的移动推送解决方案