メッセージの受信
プッシュ通知の受信方法は、プッシュ通知の実現方法によって実装が異なります。ここでは、WebSocket 上の MQTT を使ってプッシュ通知を受け取る方法を示します。Cordova アプリでプッシュ通知を受け取る場合は、phonegap-plugin-push を参考に実装してください。
プッシュ通知は、外部ライブラリーを経由して、MQTT の PUBLISH コマンドを処理することで受信できます。PUBLISH コマンドのペイロードには、アプリケーションから指定した追加データを含む JSON 文字列が渡されます。
ペイロードに含まれるパラメーターの詳細は、Kii Cloud SDK for Android の KiiPushSubscription の情報を参考にしてください。
MQTT トピック
PUBLISH コマンドは様々な目的で受信するため、サーバー側からの PUBLISH コマンドを受け取った際には、必ず MQTT トピック名をチェックするように実装してください。また、未知の MQTT トピック名を持つ PUBLISH コマンドは、将来の拡張のため無視するように実装してください。
プッシュ通知で受け取る MQTT トピック名は、初期化の際に SUBSCRIBE コマンドで講読した MQTT トピックの名前です。チュートリアル の実装も参考にしてください。
プッシュメッセージの例
以下は、プッシュメッセージを受け取ったときのペイロードを整形した例です。ここでは、トピックへのカスタムフィールドとして mymessage
= Hello
を指定した場合を想定しています。
{
"mymessage":"Hello",
"sender":"727f20b00022-8d18-5e11-991f-06db2509",
"sourceURI":"kiicloud://users/727f20b00022-8d18-5e11-991f-06db2509/topics/myTopic",
"objectScopeType":"APP_AND_USER",
"topic":"myTopic",
"objectScopeAppID":"12345678",
"senderURI":"kiicloud://users/727f20b00022-8d18-5e11-991f-06db2509",
"when":1463363865798,
"objectScopeUserID":"727f20b00022-8d18-5e11-991f-06db2509"
}
プッシュ通知のループに対する注意
プッシュ通知の設計や実装を行うときには、プッシュ通知のループが発生しないように十分に注意してください。プッシュ通知の受信処理で再びプッシュが発生する処理を行うと、永久ループから抜け出せなくなります。
ユーザープッシュ通知(Push to User)では、プッシュメッセージの受信処理を契機に、再びトピックへのメッセージ送信を行うと、プッシュ通知のループが発生する可能性があります。
万一、永久ループがリリースモジュールで発生してしまった場合、対処が非常に困難です。本質的には、すべてのエンドユーザーのモバイルアプリを対処済みバージョンに更新する必要があります。更新完了までは、開発者ポータルのプッシュ通知のキーや証明書を削除したり、ユーザーごとに REST API で購読を解除したりするなどの対処が必要になります。