閱讀844 返回首頁    go 阿裏雲 go 技術社區[雲棲]


消息服務支持移動推送

MNS消息服務

MNS消息服務在功能上可以大致分為隊列和主題兩大塊,其中隊列功能是提供一對一的傳統消息隊列中間件服務,主題功能是提供一對多的的廣播消息服務。

多樣的推送方式

MNS的主題功能可以支持將一條消息以多種方式廣播到用戶的終端。MNS的主題功能不僅支持廣播到用戶的HttpServer,也支持推送到用戶的MNS隊列裏,還支持通過短信、郵件的方式做推送。現在,主題功能也支持通過移動推送直接將消息廣播到用戶的App終端。

未來我們也會根據廣播推送的場景做更多的有機結合:比如用戶可以在一條消息裏同時指定推送App和推送短信分別的展示內容,然後在推送App不可達時改為推送短信;再比如比較常見的監控報警場景,一條報警消息可以被通過多種途徑發出去等。

移動推送的具體使用

MNS的主題功能對移動推送的支持,是通過阿裏雲的RAM授權使用了阿裏雲的移動推送這個產品,所以用戶需要先開通“移動推送”。

開通移動推送

  1. 創建App:在移動推送控製台(https://push.console.aliyun.com/ )的App列表頁,點擊頁麵右上角的“創建APP”按鈕即可創建一個新的App。
    CreateApp

  2. 配置App:App創建成功後,強烈建議您去配置app。在APP詳情頁點擊配置應用。

    • Android配置: 勾選Android,並填入PackageName,包名需要與您的代碼中的applicationID保持一致。請務必確保您創建的不同應用具有不同的PackageName,阿裏雲移動推送Android SDK以PackageName作為路由依據,不同應用配置相同包名,可能導致消息錯誤發送,即與目標應用有相同包名的應用接收到推送消息。
    • iOS配置: 勾選iOS,上傳證書並填寫證書對應的密碼,注意 開發證書和生產證書 不要弄混淆,關於證書的獲取與配置,請參見 iOS 推送證書設置指南 ConfigApp
  3. 在APP列表點擊應用證書按鈕即可查看該應用的Appkey和Secret。
    CheckKey

  4. 在APP列表頁下載App端需要集成的SDK
    DownloadSDK

  5. 配置SDK

  6. 安裝配置好的App到終端手機

MNS控製台體驗流程

創建移動推送訂閱
  1. 在MNS控製台創建Topic

  2. 進入Topic的"訂閱詳情"

  3. 創建訂閱
    CreateSub
發送消息 (PublishMessage)
  1. 進入Topic列表頁麵
  2. 向Topic發送消息

  3. 配置移動推送消息的相關屬性
    PublishPush
    移動推送的具體屬性可以參考 這裏
    ConfigPush

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

  上一篇:go 你想知道天天寫代碼的那群人的密碼是什麼樣的嗎?
  下一篇:go 程序員的常見“謊話”:對,這是一個已知 Bug