【Android】30分で実装するPush通知にてFirebase導入の簡単さと便利さに感激して早速弊社のアプリにも導入しました。
が、しかし、既存のアプリに組み込んでリリース前に動作確認しているときに想定外の不具合が発生して、ドハマりしたので書き残しておきます。
使おうとした機能はFirebase AnalyticsとNotificationです。
(動作確認は基本的にNexus5の6.0.1で実施してます)
既存のplay-servicesライブラリとの競合
結論
- play-servicesライブラリはgoogle-servicesプラグインで置き換える
(「Firebase Get Started」に書いておいてくれよおおおおおお!!!!)
問題点と解決方法
問題点
既存アプリでplay-servicesを使っている場合、「Get Started」の通りにそのままライブラリとプラグインを追加すると、ANRが発生します。
※アプリ起動後、一度ホーム画面へ行って再度アプリへ戻ったタイミングでANRが発生するので微妙に気付きにくいのがミソです。。。
ライブラリ同士で競合しているとのこと。
解決方法
既にGoogle Analyticsなどを使っていて、「Get Started」の通りに導入すると以下のようになります。
dependencies {
// 略
// google play service
compile 'com.google.android.gms:play-services:9.0.2'
compile 'com.google.android.gms:play-services-base:9.0.2'
compile 'com.google.android.gms:play-services-gcm:9.0.2'
// ADD Firebase
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
compile 'com.google.firebase:firebase-crash:9.0.2'
}
apply plugin: 'com.google.gms.google-services'
以下のようにplay-servicesを削除して、play-service-analyticsを追加すればOKです。(Analyticsを使っていなければ追加は必要ありません)
dependencies {
// 略
// google play service
compile 'com.google.android.gms:play-services-base:9.0.2'
compile 'com.google.android.gms:play-services-gcm:9.0.2'
compile 'com.google.android.gms:play-services-analytics:9.0.2'
// ADD Firebase
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
compile 'com.google.firebase:firebase-crash:9.0.2'
}
apply plugin: 'com.google.gms.google-services'
Notificationアイコンがカスタムできない
結論
- シンプルかつ輪郭だけで判別できるようなアイコンにしよう
問題点と解決方法
問題点
9.0.2現状、Firebase Notificationではアプリがbackgroundにいるときに表示されるNotificationアイコンはカスタマイズできません。
使われるアイコンはアプリのLauncherアイコンなのですが、任意のNotification用のアイコンには変えられないわけです。
更に、アイコン画像はsmallIconにセットされる仕様らしく、Android端末のバージョンによってはアイコンが判別できなくなります。
(手元には4.x系と6の端末しかなかったのですが、5.0以上の端末で判別不可?)
ということで、よくある角丸の四角いアイコンの中にサービス名などを書いているようなアイコンだと全く判別付きません。
対応前後での見え方
角を丸くした四角いアイコン(赤枠外透過あり)を使っていたのですが以下のようになってしまい、どのアプリからの通知だかさっぱりわかりません。。。
なんとなくどのアプリからの通知か分かるようになった気がします。
Launcherアイコンの例
例えば下のスクショだと、2段目のLauncherアイコンならおそらく判別可能ですがそれ以外はどのアプリからの通知だか分からないです。
とはいえそう簡単にLauncherアイコンを変えるわけにもいかないと思いますので、早くNotificationアイコンのカスタマイズできるようにして欲しいところです。。。
(おまけ)Google Play servicesをFirebase APIsに寄せていく動き
Google APIs for Androidをみると、以下のような記述があります。
・App Invites (now Firebase Invites) is still available at com.google.android.gms.appinvite, but going forward you should use com.google.firebase:firebase-invites.
・Firebase Cloud Messaging builds on and improves the Google Cloud Messaging API. You can keep using Google Cloud Messaging with com.google.android.gms.gcm, but we recommend upgrading to com.google.firebase:firebase-messaging.
超意訳すると以下の内容になります。
- App Invites使いたかったら
com.google.firebase:firebase-invites
使ってね。com.google.android.gms.appinvite
は今んとこ使えるけど使えなくなってもしらないよ。 - Firebase Cloud Messaging > Google Cloud Messaging APIだよ。まだ
com.google.android.gms.gcm
使えるけど、com.google.firebase
使ってFirebase Cloud Messagingへの移行をオススメするよ。
ということで、I/O 2016でさんざんFirebaseのセッションしてたことも踏まえて、Googleは諸々の機能をFirebaseに移行しようとしているみたいです。
Google教徒のみなさまはこの期にFirebase導入を検討してみてはいかがでしょう。
グーメン( ´-`)†