プッシュ通知の仕組み
ここでは FCM と Kii Cloud の関係について説明します。
このページに示す内容は、FCM と APNs に共通します。MQTT を使った実装の仕組みは、MQTT プロトコル を参照してください。
プッシュ通知を実現するための構成
いずれのプッシュ通知ネットワークを使用する場合も、プッシュ通知を以下の 3 つの要素を使って実現します。
-
FCM/APNs サーバー
Google や Apple が提供しているプッシュ通知用サービスのためのサーバーです。
-
スマートフォンなどのデバイス
エンドユーザーが使用しているデバイスです。
-
アプリケーションサーバー
Kii Cloud です。プッシュ通知でのアプリケーションサーバーとしての機能が組み込まれています。
各プッシュ通知ネットワークでは、デバイスの 1 つ 1 つをデバイストークンによって識別します。デバイストークンは特定のデバイス上の特定のモバイルアプリを識別するための ID で、デバイス上で FCM や APNs のライブラリーを呼び出すことで発行されます(デバイスの IMEI ではありません)。FCM/APNs サーバーは、デバイストークンと実デバイスとの対応表を管理していることになります。
プッシュ通知を送信するには、アプリケーションサーバーからプッシュメッセージと共に送信先のデバイストークンを指定して、プッシュ通知ネットワークのサーバーを呼び出します。その結果、各プッシュ通知ネットワークの実装により、指定したデバイストークンのデバイスにメッセージが届きます。
なお、プッシュ通知で扱うメッセージは、図に示すように JSON 形式の文字列です。JSON では任意のデータを送信できるほか、プッシュ通知ネットワークに特有の制御フィールドも含みます。
Kii Cloud でのプッシュ通知
Kii Cloud の API では、プッシュ通知の送信先はユーザーによって決まります。デバイスではありません。
Kii Cloud が持つ 3 つのプッシュ通知の送信機能では、以下のようにユーザーが関連しています。
- サーバー上の変更のプッシュ通知(Push to App)では、ユーザーによって講読された Bucket が更新されたとき、そのユーザーのデバイスに対してプッシュ通知が送信されます。
- ユーザープッシュ通知(Push to User)では、ユーザーによって講読されたトピックにメッセージが送信されたとき、そのユーザーのデバイスに対してプッシュ通知が送信されます。
- 管理者メッセージのプッシュ通知(Direct Push)では、ユーザー 1 人を管理者が送信先に指定し、そのユーザーのデバイスに対してプッシュ通知が送信されます。
1 人のユーザーが複数のデバイスを持っており、各デバイスから必要な初期化が行われていた場合、1 回のプッシュ通知のリクエストで、そのユーザーの全デバイスに同時に通知が行われます。
ユーザーに対してプッシュ通知を送信できるよう、Kii Cloud では、ユーザーとデバイストークンの対応表を管理しています。プッシュ通知の送信先として指定されたユーザーが、複数のデバイストークンと紐付く場合は、プッシュ通知ネットワークに対して複数回のプッシュ通知リクエストを出します。
送信先はユーザーが関連するため、ユーザーを定義せずにプッシュ通知を利用することはできません。明示的なログインを避けたい場合は、仮ユーザー 等を使った実装を検討してください。
リクエストの流れ
プッシュ通知を初期化してからメッセージを受信するまでの流れは次のとおりです。Kii Cloud の SDK を使うと、一部が背後に隠れますが、仕組みとしては以下の動きになります。
デバイスは、FCM/APNs サーバーにデバイスを登録するリクエストを送信します。
FCM/APNs サーバーは、デバイスを登録し、デバイストークンを発行します。
デバイスでは、Kii Cloud にログインした状態でクライアント SDK の初期化 API を呼び出します。これにより、デバイストークンは Kii Cloud に転送され、ユーザー ID とデバイストークンの組がクラウド上に保存されます。
Kii Cloud で、何らかのイベントが発生します。Kii Cloud のプッシュ通知の仕様では、送信対象のユーザーが持つすべてのデバイスに通知されます。Kii Cloud は、保存したユーザー ID とデバイストークンの組から、対象となるデバイストークンのセットを見つけます。
Kii Cloud は、FCM/APNs サーバーに、通知対象のデバイストークンに対するプッシュ通知の要求を行います。
FCM/APNs サーバーは、デバイスにプッシュメッセージを送信します。デバイスは受信したプッシュメッセージを処理することができます。
ここで、デバイストークンを Kii Cloud に登録する処理()をデバイスのインストールと呼びます。インストール処理は、モバイルアプリの初期化の際や、プッシュ通知ネットワークがデバイストークンの変更を通知した際に実行する必要があります。
デバイスのインストール
デバイストークンを Kii Cloud に登録する処理(上記 リクエストの流れ の )をデバイスのインストールと呼びます。
デバイスのインストールは、デバイストークンをログイン中のユーザーと紐付けて Kii Cloud に登録する処理です。
デバイスのインストールは、プッシュ通知の受信処理と関連しています。REST API で講読処理やプッシュ通知の送信処理を行ったメッセージを受信するプラットフォームに合わせて、Android、iOS、JavaScript のプッシュ通知の初期化方法を参照してください。
プッシュ通知が不要になった場合は、デバイスのアンインストール処理を行い、Kii Cloud 上のデバイストークンとユーザーの対応を破棄することができます。なお、プッシュ通知ネットワークからデバイストークンが無効になったことが Kii Cloud に通知された場合も、デバイスのアンインストール処理が実行されます。
デバイスとユーザーの関係
Kii Cloud では、FCM や APNs から発行されたデバイストークンを使ってプッシュメッセージの通知先を識別します。
この仕組みにより、プッシュ通知は以下のような動きとなります。
1 人のユーザーは異なるデバイスから、複数のデバイストークンをインストールできます。これは、同じユーザーがスマートフォンとタブレットに同時にログインすると、両方でプッシュ通知を受け取れることを意味します。
1 つのデバイス上の同じモバイルアプリで、異なるユーザーを使うと、最後にデバイストークンをインストールしたユーザーだけがプッシュ通知を受け取れます。新しいユーザーでデバイストークンをインストールすると、Kii Cloud 上のデバイストークンは新しいユーザーとの組み合わせで上書きされるためです。
仮ユーザー を使った場合、デバイスごとに異なるユーザーとして識別されます。仮ユーザーを使ったモバイルアプリでは、1 人のユーザーに向けたプッシュ通知を異なるデバイスで受け取ることはできません。
デバイストークンが Kii Cloud から削除されるのは、以下のタイミングです。
モバイルアプリから明示的にプッシュ通知のアンインストール API を呼び出した場合
別のユーザーによって、デバイストークンが上書きインストールされた場合
デバイストークンが無効になったことを Kii Cloud のサーバーが検出した場合(モバイルアプリの起動ごとにデバイスのインストールを行うことが適切です)