はじめに
いよいよGCMの終了も近くなり、GCMを使ったPush通知アプリを開発している皆さまは対応に追われている頃でしょう。
各種ライブラリもFCM移行の対応が必要になってきます。
GrowthPushを使ったAndroidアプリを担当しており、FCM移行で詰まった箇所があったので備忘録として残しておきます。
GrowthPushのFCM対応
Android版の公式ドキュメントは以下になります。
https://faq.growthbeat.com/article/226-gcmtofcm
基本的には書いてある通りにやっていけば大丈夫!
と思っていましたが、そんなことはありませんでした。
Push通知が受信できない
私がハマったのは以下の2点です
①新規作成したFirebaseプロジェクトのサーバキーをGrowthbeatの管理画面で登録したら、まだFCM対応していないアプリでPush通知が受信できなくなった
GrowthPushはアプリ側がFCM対応をしておらず、サーバ側がFCM対応済み、といった状況でもPush通知を受信することができます。
もしサーバキーの更新後にPush通知が来なかったら、管理画面で登録したサーバキーと、アプリで設定しているSenderIDの紐付けを疑ってください。
アプリ側のFCM対応によって、デバイストークン登録メソッドである
GrowthPush.getInstance().requestRegistrationId(String senderId)
の引数が消え、ここでのSenderIdは不要になります。
代わりにアプリにインポートしたgoogle-services.jsonにproject_numberとして同一の数値が記載されているのです。
FCM対応前に使用していた上記メソッドでSenderIdと、FCM対応後にgoogle-services.jsonに記載されているproject_numberは同一のものでなければなりません。
つまり、google-services.jsonに記載されているproject_numberが以前使用していたSenderIdと違う値だった場合、GrowthPushの管理画面で登録したサーバキーとSenderIdが紐づいておらず、Push通知が受信できない、ということになります。
SenderIdの数値がFCM対応前と対応後で変わってしまう、などという状況があるのでしょうか。
####ありました。
GCMをGoogleCloudPlatformのプロジェクトで利用しており、Firebaseプロジェクトがまだ存在しない場合、Firebaseプロジェクトを新規作成する必要があります。
Firebaseプロジェクトを新規作成する際、それまでGCMを利用していたGoogleCloudPlatformの既存プロジェクトを引き継ぐことができるのですが、それをしなかった場合
つまり、Firebaseプロジェクトを完全新規で作成した場合はSenderID(FirebaseConsole内では送信者ID)も新規で発行され、当然ですがGCMで利用していたプロジェクトとは全く紐づいていない状況になります。
実際にこの状況になっており、FCM対応をしていないアプリでPush受信ができなくなる、という事象にはまっておりました。
※GCMをすでに利用しており、FCM対応でFirebaseプロジェクトを新規作成する場合は必ず既存プロジェクトを引き継ぎましょう
②デバイストークンが登録されず、Push通知が受信できない
こっちが本題になります。こちらはアプリ側にFCM対応を行なった後の話です。
公式ドキュメント通りに対応したはずなのにデバイストークンが登録できてない!
ってことが実際にあり悩みました。
そんな時にググりまくってたどり着いたのが以下の答えです。
apply plugin: 'com.google.gms.google-services'
これをapp/build.gradleの一番下に追加してあげてください。
私の場合はこれで全て解消されました。
公式ドキュメントには書いてなかったので、これ、相当悩みました。
以上対応で無事にFCM対応前アプリ/対応後アプリの両方でGrowthPushによるPush通知が受信できるようになりました。
めでたしめでたし