AndroidでFCM(GCM)を使う場合、サーバから送られてくるpayloadの内容により、
アプリがbackground/foregroundの時で挙動が変わるようである。
受信してもGcmListenerService#onMessageReceived()を通らなかったので、いろいろと調べてみた。
詳しくは公式ドキュメントに記載されている。
https://developers.google.com/cloud-messaging/concept-options
payloadの内容がnotificationの場合
GCM automatically displays the message to end user devices on behalf of the client app. Notifications have a pre-defined set of user-visible keys.
システムが自動的に通知を出すらしい。
サンプルデータ
body/title/iconは予約されているキーなので、これらが必要になる。
{
"to" : "registration id.....",
"notification" : {
"body" : "本文",
"title" : "タイトル",
"icon" : "icon"
}
}
payloadの内容がdataの場合
Client app is responsible for processing data messages. Data messages have only custom key/value pairs.
カスタムキーの受信が可能。アプリはGcmListenerServiceでonMessageReceivedの実装を刷る必要がある。
{
"to" : "registration id.....",
"data" : {
"message" : "本文",
"title" : "タイトル",
"something" : "何か"
}
}
ハイブリッド版
こうすると、background時にはnotificationにより自動的に通知が出て、foreground時には受け取った処理を実装することが出来る。
{
"to" : "registration id.....",
"notification" : {
"body" : "本文",
"title" : "タイトル",
"icon" : "icon"
},
"data" : {
"message" : "本文",
"title" : "タイトル",
"something" : "何か"
}
}
どんな時もonMessageReceivedで処理が必要な場合は、notification含めずにdataのみで送信した方が良いかもしれない。