21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android FCM(GCM) バックグラウンドでonMessageReceivedを通らない時は

Posted at

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のみで送信した方が良いかもしれない。

21
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?