AndroidアプリでPush通知を行う場合、Firebase Cloud Messaging (旧Google Cloud Messaging) を経由しGoogle Play Servicesがよしなに処理してくれるよう投げることになる。
FCMを使うということは、すなわちFirebaseのプロジェクトを firebase.google.com 上で作成するということになる。
アプリ開発の現場でよくあるケースに、当初はAndroid用のPush通知目的でのみ作成したFirebaseプロジェクトを、iOS含めAnalyticsやRemote Configを本格的に利用しようとした時にエイヤッと統合されたものへ移行する、というものがある。
この記事は、既にFCMを利用しているアプリのプロジェクトを移行できるのか検証した時のログである。
アプリ自体のリニューアル(package nameの変更)は行わないという前提のため、APK署名時に使う証明書は同じものとする。
今回移行するアプリは、以下のように設定して試した:
プロジェクト名 | mynotifymigrationapp-orgproj |
プロジェクトID | mynotifymigrationapp-orgproj-1 |
Androidパッケージ名 | jp.s64.android.example.mynotifymigrationapp |
アプリのニックネーム (省略可) | MyNotifyMigrationApp (oldproj) |
デバッグ用の署名証明書 SHA-1(省略可) | 89:E6:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:34:E5 |
credential登録方法 | google-services.jsonをアプリ内に配置し、google-servicesプラグインで認証 |
SHA証明書フィンガープリント(※リリース用) | EA:F3:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:71:C3 |
通知の利用 | 数回なげて、受信できることを確認した |
FirebaseがInvites, Dynamic Links, Authenticationなどの機能を利用するアプリが不正なものではないことを確認できるのは、Googleのサーバにpackage nameと証明書フィンガープリントのペアをグローバルに登録し、それと一致することを条件とするため。
よって、FCMではマストではないSHA1フィンガープリントの登録ではあるが、他のプロジェクト(他の人物、というとわかりやすいか?)が同一の組み合わせを登録しようとするとエラーにで弾かれるようになっている。
すなわち一番はじめにすることは、旧プロジェクトに紐付いた証明書に関する設定を削除すること。
旧プロジェクトのProject Overview
-> Settings
-> プロジェクトの設定
-> 全般
-> マイアプリ
-> Android アプリ
-> 当該アプリ(MyNotifyMigrationApp (oldproj))
内に SHA 証明書フィンガープリント
という項目があるため、この内容を削除する。
今回の場合は、
89:E6:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:34:E5
EA:F3:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:71:C3
の2件。
この時点で既に旧アプリでの認証情報は不要になるため、削除してしまう。
アプリ内に配置したgoogle-services.json
を削除して、おしまい。
既に移行先プロジェクトが存在する場合はスキップ。
今回は以下の内容にした:
プロジェクト名 | mynotifymigrationapp-newproj |
プロジェクトID | mynotifymigrationapp-newproj-1 |
Androidパッケージ名 | jp.s64.android.example.mynotifymigrationapp ※元と同じ |
アプリのニックネーム (省略可) | MyNotifyMigrationApp (newproj) |
デバッグ用の署名証明書 SHA-1(省略可) | 89:E6:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:34:E5 ※元と同じ |
作成の途中でgoogle-services.json
をダウンロードすることができるので、これをアプリに配置しておく。ステップ2で削除した分。
ステップ1で削除した分。移行先プロジェクトの Project Overview
-> Settings
-> プロジェクトの設定
-> 全般
-> マイアプリ
-> Android アプリ
-> 当該アプリ(MyNotifyMigrationApp (newproj))
に、本番の証明書から取ったSHA1ハッシュを追加する。
今回の場合は EA:F3:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:71:C3
となる。
Amazon SNSやReproなどを使っている場合、FCMへAPI経由でアクセスするためのサーバーキーを新しいものへ変更する必要がある。
Project Overview
-> Settings
-> プロジェクトの設定
-> クラウドメッセージング
-> プロジェクト認証情報
から取得できるので、これを用いて変更作業をする。