2
4

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を実装してみた結果

Last updated at Posted at 2016-10-12

2016/10/12時点の記事です。

結論

  • GCMよりは簡単そう。
  • アイコン設定がいまいち。
  • データの受け渡しは、FCMのjsonには含めない方がいいかも。

導入について

導入については、色んなところで説明されているし、公式のサンプルが優秀なので、割愛します。
公式ガイドを参照してください。

つまづいたとことか、注意点とか

  • app直下に、FCM管理画面で取得したgoogle-service.jsonを設置しとかないと、
    compile 'com.google.firebase:firebase-messaging:9.6.1'を設定した段階でbuildが通らなくなる。
  • なんでかbuildが通らない(エラー忘れちゃった)

app/build.gradleにいかを記述することで解決するかも。

android {
    .........
    packagingOptions {
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
    }
}

これでダメなら、AndroidStudioの再起動で通るようになるかも。

イラついたところ

アイコンの設定です。
アプリがforegroundの時は、問題なく行えます。
FirebaseMessagingServiceをextendsしたクラスのonMessageReceivedが起動して、そこで通知を作成しています。

しかし、backgroundにいる場合、onMessageReceivedが動きません。
そもそも、このサービス自体呼び出されないっぽいです。

2017/03/01 どうやら呼び出されるようになったっぽい

何か方法があるのかと思ったら、公式のバグ仕様のようです。
そうすると、勝手に通知も作られるため、アイコンはデフォルト設定になってしまいます。
よくある角丸のアイコンにしてると、グレーの丸の中に角丸の四角で白抜きされた、よく分からないアイコンになります・・・・。

こんな感じ
スクリーンショット 2016-10-12 11.35.52.png

ダメでしょ・・・。

badgeについて

Push通知を飛ばすときって、メッセージがあったり、お知らせがあったりなので、badgeも更新したいですよね。
FCMのpushに送るjsonのフォーマットに、dataってのがあります。
何かデータを受け取りたい場合、notificationではなく、dataに入れるべきです。
dataは、ActivityのgetIntent().get("hoge")で受け取れますが、notificationは、OnMessageReceivedまでしか引き継がれないためです。
しかし、「これbadgeの更新に使えるじゃん!」って思ってたのですが、これは罠でした。

foregroundの時は、問題ないです。
受け取ったbadgeも更新できてますし、アプリの二重起動も起こらないようにできます(わざと起動させることもできます)。
しかし、backgroundの時が問題です。

状況としては以下のことが考えられます。

  • アプリが起動していない。

    • 通知から起動すれば問題無し > ◯
    • 通知以外から起動すると、データが受け取れない > ×
  • アプリは起動しているが、backgroundにいる

    • 通知から起動すれば問題無し > ◯
    • 起動中のアプリ一覧から動かすとデータが受け取れていない > ×
  • アプリは起動しているし、foregroundだけど、画面がスリープになっている

    • background扱いになる > まぁ問題無し
    • 通知から起動すると、アプリが二重起動される > ×
    • スリープから解除してもデータは受け取れていない > ×

~~まぁ、データの受け渡しに関しては、あまり使わない方が良さそうです。
これならいっそ、データの受け渡しはできない仕様にしてほしかった・・・。
2017/03/01 どうやら呼び出されるようになったっぽい

まとめ

とりあえず現状は、通知だけを行うものとして考えて、合わせて送りたいデータがある場合は、別の方法を考えた方が良さそうです。
起動時とか復帰の時(onResume)とかでAPIで受け取るようにするとか。

導入については、ちょっとだけ躓いたものの、基本的にはそれほど苦労せず導入できました。

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?