MQTT 経由でのプッシュ通知の利用

MQTT を使ってプッシュ通知を実現するには、このページの実装方法に従います。Web アプリ、Thing とも、このページの実装方法に基づいてプッシュ通知を利用します。MQTT 経由で API を使用している場合でも、プッシュ通知はこのページの実装方法を使用します。

このページの内容は、Kii Cloud のプッシュ通知の機能についての知識があることを前提に説明します。プッシュ通知の詳細は プッシュ通知 をご覧ください。

Thing-IF SDK や Thing SDK Embedded を利用する場合、これらは SDK 内部で実行されるため、特別な実装は不要です。

MQTT トピックの講読

Kii Cloud では MQTT プロトコルを使ってプッシュ通知を実現します。

MQTT プロトコルの仕様には、MQTT トピックの階層構造によってアプリケーション上の意味付けを行う仕組みがありますが、プッシュ通知を実現する場合 Kii Cloud ではこの機能を使用しません。単一の MQTT トピックを使って、プッシュ通知を実現します。

下の図は、Web アプリまたは Thing から MQTT を使ってプッシュ通知を実現する際の内部構造を表しています。

Kii Cloud では、Web アプリまたは Thing が MQTT のサブスクライバーとなります。MQTT コネクションの初期化の際、Kii Cloud から MQTT トピック 1 つが接続情報として返されます。それを SUBSCRIBE コマンドで講読することで、プッシュメッセージの通信路を構築します。図では「MQTT の講読」として示されています。

これとは別に、Web アプリのユーザーまたは Thing は、Kii Cloud 上の Bucket やトピックを Kii Cloud の API を使って講読します。図では「Kii Cloud の講読」として示されています。講読している Bucket が更新されたり、講読しているトピックにメッセージが届いたりすると、そのイベントは MQTT トピックによる通信路を通してサブスクライバーに伝えられます。

MQTT トピックの講読による通信路は、コネクションごとに 1 つしか存在しません。Kii Cloud 内の Bucket やトピックを複数講読していても、それらのイベントは同じ MQTT トピックに集約されて通知されます。通知を受けた際、イベントの発生源となった Bucket 名やトピックの ID などの詳細は、PUBLISH コマンドのペイロードから知ることができます。

このドキュメントでは、Kii Cloud の トピック と、MQTT プロトコルの MQTT トピック を区別して表現します。上の説明のとおり、これらは別の概念です。

この動きは、下の図に示すようにサブスクライバーが複数になった場合でも同様です。MQTT のコネクションと MQTT トピックは 1 対 1 で対応しています。

サブスクライバーからは、それぞれのコネクションを確立する際、コネクションに対応する MQTT トピックを講読します。また、Kii Cloud の API を使って Bukcet やトピックを講読します。これらの Bucket やトピックでイベントが発生すると、それらを講読しているサブスクライバーに対応した MQTT トピックに集約され、プッシュ通知として伝えられます。

プッシュ通知のシーケンス

プッシュ通知を利用するには、以下の手順が必要です。

  1. MQTT の接続情報を得る

    MQTT ブローカーに接続するには、そのサーバー名、ポート番号、ユーザー名、パスワード、プッシュ通知用の MQTT トピック名など、多くの情報が必要です。

    これらの接続情報は、API で取得できます。SDK を使用している場合、HTTPS のリクエストによって接続情報を取得できます。MQTT 経由で API を使用している場合は、デフォルト MQTT ブローカーでの初期登録操作によって接続情報を取得できます。

  2. MQTT ブローカーに接続する

    得られた情報から、MQTT ライブラリーを使って Kii Cloud が提供する MQTT ブローカーに接続します。

  3. MQTT トピックを講読し、通知を待つ

    MQTT プロトコルの SUBSCRIBE コマンドを送信して、プッシュ通知用の MQTT トピックを講読します。

    サーバー側でイベントが発生すると、講読した MQTT トピックに対する PUBLISH コマンドが届きます。

手順の 2 と 3 について、シーケンスの例を以下に示します。

Kii Cloud 側の MQTT トピックを SUBSCRIBE コマンドによって講読した後は、基本的に Kii Cloud からの PUBLISH コマンドを待つだけの動作となります。Kii Cloud でイベントが発生すると、PUBLISH コマンドを受け取り、そのペイロードからイベントの詳細を得ます。

現在サポートしている QoS は 0 であるため、PUBLISH コマンドに対する PUBACK コマンド等の応答は不要です。

プッシュ通知の機能のみを使用する場合、クライアント側での SUBSCRIBE コマンドの受信処理や PUBLISH コマンドの送信処理は不要です。Kii Cloud からクライアント側の MQTT トピックを講読することはありません。

その他、ライブラリーによっては キープアライブタイマー の実現のため、PINREQ コマンドの送信が必要になる場合があります。