消息服務支持移動推送
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 推送證書設置指南
-
配置SDK
- iOS 版 SDK 請參考文檔:iOS SDK QuickStart
- Android 版 SDK 請參考文檔:Android SDK QuickStart
安裝配置好的App到終端手機
MNS控製台體驗流程
創建移動推送訂閱
- 在MNS控製台創建Topic
- 進入Topic的"訂閱詳情"
- 創建訂閱
發送消息 (PublishMessage)
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();
}
如果您在使用過程中遇到了什麼問題,或者有什麼想法願意一起交流,請站內信或者工單聯係我們~
最後更新:2017-04-01 17:04:39