すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:メッセージのブロードキャスト

最終更新日:Mar 22, 2025

概要

IoT Platform は、複数のデバイスに同時にメッセージをブロードキャストできます。デバイスは、以下の方法を使用してメッセージを処理できます。IoT Platform は、単一デバイスブロードキャストと複数デバイスブロードキャストをサポートしています。2 つの方法の Topic 形式は異なります。デバイスは、サポートされている方法に基づいて応答を返す必要があります。

複数デバイスブロードキャスト

複数デバイスブロードキャストは、システムメッセージを複数のデバイスにブロードキャストするために使用されます。デバイスは、これらのメッセージをサブスクライブせずに受信できます。Topic 形式は /sys/${pk}/${dn}/broadcast/request/+ です。

スケジュール済みブロードキャスト

スケジュール済みブロードキャストは、指定されたデバイスにメッセージをブロードキャストするために使用されます。デバイスは、対応する Topic をサブスクライブした後にのみ、これらのメッセージを受信できます。Topic 形式は /broadcast/${pk}/${custom action} です。

メッセージの受信

この機能を使用する前に、Android 用 Link SDK を初期化し、ダウンストリームデータリスナーを登録する必要があります。スケジュール済みブロードキャストでは、デバイスが Topic をサブスクライブする必要があります。Topic は IoT Platform によって定義され、/broadcast/${pk}/${custom action} 形式です。カスタムアクションは、形式に準拠する任意の値にすることができます。デバイスは、IoT Platform によって提供された定義に基づいて Topic をサブスクライブします。

// ダウンストリームデータリスナーを登録します。
LinkKit.getInstance().registerOnPushListener(notifyListener);
/**
 * ダウンストリームデータリスナー。IoT Platform からのすべての Message Queuing Telemetry Transport(MQTT)データは、このリスナーでコールバックされます。
 */
private static IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
    /**
         * shouldHandle が Topic を処理しないと指定していない場合、onNotify リスナーがトリガーされます。
         * @param connectId 接続タイプ。このパラメーターは、接続が持続的接続かどうかを確認するために使用されます。 connectId == ConnectSDK.getInstance().getPersistentConnectId()
         * @param topic ダウンストリーム Topic。IoT Platform から送信されたデータをホストします。
         * @param aMessage ダウンストリームデータの内容。
         */
    @Override
    public void onNotify(String connectId, String topic, AMessage aMessage) {
        String data = new String((byte[]) aMessage.data);
        // IoT Platform から返されるデータの例: data = {"method":"thing.service.test_service","id":"123374967","params":{"vv":60},"version":"1.0.0"}
        ALog.d(TAG, "onNotify() called with: connectId = [" + connectId + "], topic = [" + topic + "], aMessage = [" + data + "]");
        if (ConnectSDK.getInstance().getPersistentConnectId().equals(connectId) && ! TextUtils.isEmpty(topic) &&
                   topic.startsWith("/sys/" + DemoApplication.productKey + "/" + DemoApplication.deviceName + "/broadcast/request/")) {
            /**
                 * Topic 形式は /sys/${pk}/${dn}/broadcast/request/+ です。
                 * IoT Platform は、デフォルトではサブスクリプションまたは確認応答(ACK)メッセージを必要としません。ただし、IoT Platform とデバイスから ACK メッセージをスケジュールすることもできます。
                 * 例: /sys/a14NQ5RLiZA/android_lp_test1/broadcast/request/1229336863924294656
                 * 注: IoT Platform などのトリガー側からのデータは、Base64 エンコードする必要があります。そうしないと、デバイスで文字化けが発生する可能性があります。
                 * 例: IoT Platform: org.apache.commons.codec.binary.Base64.encodeBase64String("broadcastContent".getBytes())
                 */
            //
            ToastUtils.showToast("複数のデバイスにブロードキャストされたメッセージが IoT Platform から受信されました: topic=" + topic + ",data=" + data);
            // TODO: 複数デバイスブロードキャストに基づいて処理ロジックを定義します。
        } else if (ConnectSDK.getInstance().getPersistentConnectId().equals(connectId) && ! TextUtils.isEmpty(topic) &&
                   topic.startsWith("/broadcast/" + DemoApplication.productKey )) {
            //
            /**
                 * この Topic のメッセージを受信するには、Topic をサブスクライブする必要があります。Topic 形式は /broadcast/${pk}/${custom action} で、IoT Platform から送信された Topic と同じである必要があります。
                 * 例: /broadcast/a14NQ5RLiZA/oldBroadcast
                 * 注: IoT Platform などのトリガー側からのデータは、Base64 エンコードする必要があります。そうしないと、デバイスで文字化けが発生する可能性があります。
                 * 例: IoT Platform: org.apache.commons.codec.binary.Base64.encodeBase64String("broadcastContent".getBytes())
                 */
            ToastUtils.showToast("IoT Platform からのブロードキャストメッセージが受信されました: topic=" + topic + ",data=" + data);
            // TODO: 受信したブロードキャストメッセージに基づいて処理ロジックを定義します。
        } else {
            ToastUtils.showToast("IoT Platform からのブロードキャストメッセージが受信されました: topic=" + topic + ",data=" + data);
            /**
                 * TODO
                 * サブスクライブしている Topic に基づいて処理します。
                 */
        }
    }