FCM(Firebase Cloud Messaging)をつかったPush通知の際、
通常、GoogleService-Info.plistをXcode プロジェクトのルート以下に配置して実装しているかと思います。
GoogleService-Info.plistはFCMのアカウント(およびプロジェクト)に紐づくファイルとなっており、
基本的に1つのFCMアカウントからのメッセージしか受診できません。
同じアプリでユーザーによって送信元のFCMのアカウントを切りかえたいという話があったので
その調査のメモ書きになります。
※前の記事のiPhone版になります。
###前提事項
前提事項として、GoogleService-Info.plistを配置した状態でFCMのPush通知が届いている環境であることを想定しています。
Push通知が届かない場合の問題の切り分けとして、単純に設定不足なのか
今回の設定が効かなかったのかを区別するため上記前提となっております。
なので、GoogleService-Info.plistありの状態との差分の説明になります。
###GoogleService-Info.plistから必要な情報を取得
後で、GoogleService-Info.plistファイルの読み込みの代わりを実装しますので
GoogleService-Info.plistから[アプリケーションID]、[GCM_SENDER_ID]、[APIキー]、[プロジェクトID]をコピーするなりして保存しておいてください。
後で使います。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>XXX</string>
<key>REVERSED_CLIENT_ID</key>
<string>XXX</string>
<key>API_KEY</key>
<string>[APIキー]</string>
<key>GCM_SENDER_ID</key>
<string>[GCM_SENDER_ID]</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>XXX</string>
<key>PROJECT_ID</key>
<string>[プロジェクトID]</string>
<key>STORAGE_BUCKET</key>
<string>XXX</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>[アプリケーションID]</string>
</dict>
</plist>
###GoogleService-Info.plistの削除
必要な情報を取得したので、
GoogleService-Info.plistファイルをXcode プロジェクトのルート以下から取り除きます。
Xcode プロジェクトのルートフォルダを開いて削除します。
###FireBaseの初期化の実装
実装済みのFirebaseApp.configure()
の代わりにoptions指定付きの初期化メソッドを呼び出します。
// Firebase初期化
let options = FirebaseOptions(googleAppID: "[アプリケーションID]", gcmSenderID: "[GCM_SENDER_ID]")
options.apiKey = "[APIキー]"
options.projectID = "[プロジェクトID]"
FirebaseApp.configure(options: options)
(ソースはSwiftのプログラムになってます。)
状況に合わせて[アプリケーションID]、[GCM_SENDER_ID]、[APIキー]、[プロジェクトID]を変えれば、
FCMのアカウントの切替などができるかと思います。
※アプリ内の操作をトリガーに上記を呼び出して切り替えをすると、
消したはずのFCMアカウントからもPushが届いたりするので
初回インストール時点での切替にした用が良さげです。
###余談
今回は割愛していますが、
iPhoneのPush通知はそもそも端末に届くようにするまでに
苦労をしている気がします。
この記事では、アナリティクスを利用していないですが、後述の参考にしたFirebaseのドキュメントにも
「このアプローチは、状況によってはアナリティクスの収集に影響する可能性があります。信頼できるアナリティクスのセクションをご覧ください。」
とあり、アナリティクスを活用される場合は、ディレクトリを分ける方法を試してみるといいかもしれません。
###参考
下記Firebaseのドキュメントを元に試した内容になります。