cordova-plugin-fcmプラグインで通知を飛ばすのに必要なfcmTokenが取れなかった
時の対処法
※cordova-plugin-fcmとは、firebaseでメッセージを受け取るために必要なfcmTokenを取得
することができるプラグインです。
firebaseを実装したいアプリを登録後、android/iosにそれぞれ必要なファイルを取得して
アプリのファイルにコピーすることでプッシュ通知を実装することができます。
以下本編↓
iphoneでデバッグ中、getTokenの中身を確認すると返り値がnullになっていた。
以下試してみたこと。
①setTimuoutを使用
getToken関数は、Token取得のタイミングが割とシビアでindex.jsのdevicereadyの中で
実行すると、devicereadyが実行されたと同時にgetToken関数も即座に実行される。
fcmTokenはアプリが立ち上がった直後では取得できない場合があり、これを修正するには
setTimeoutでgetTokenを遅延する。
</pre> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>setTimeout(gets, 3000);</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>function gets(){<br />window.FCMPlugin.getToken(function (token) {<br />console.log(token);<br />});<br />}</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <pre>
いやでも3秒以降になるのでビルドと一緒に取得→早すぎた取得できない!みたい事故を回避できる。
②xcodeのビルド方法を変更
getToken関数はコードだけでなくxcodeのビルド方法でも影響は受ける
使用しているiosとcordova-plugin-fcmのバージョンが低い場合は
NewBuildSystemでは適切にビルドできずに処理をこぼす場合がある。今あるバージョンを変えずにビルドするには
xcodeを開いてFileタグを開いてWorkspacesSettingをクリック。WorkspacesSettingの中のNewBuildSystemを
RegacyBuildSystemに切り替える。このやり方については自分のiosとcordova-plugin-fcmのバージョンと応相談。
③APNs認証キーを発効し直す。
※iosでは、APNsにアクセスするためのAPNs認証キーが必要で、これがないとメッセージを
受け取ることができない。ちなみにandroidでは必要ありません。
自分は上記二つでうまくいかなかったのでもっと深堀りしてfirebaseのAPNsキーの設定部分を調べたところ、
APNs認証キーのキーIDの箇所が、存在しないキーを参照していたことがわかりました。
なのでAPNs認証キーを、既存のキーIdを持ったキーに切り替えて再ビルド。この方法でfcmTokenを取得
することができました。
以下調べ方
①まずAppleDeveloperに移動
②画面左にあるCertificates, Identifiers&Profilesをクリック。
③下から2番目のkeysをクリック。
④その中の適当なkeysのKeyIdをコピー。
⑤firebaseコンソールでiosの「CloudMessaging」に移動
⑥iosアプリの構成にある古いAPNs認証キーを削除。
⑦先ほどコピーしたKeyIdと過去に発効したp8ファイルを貼り付けて新しいAPNs認証キーを発効。
※p8ファイルがない場合はAppleDeveloperのkeysで新規作成してください。
⑧アプリを再ビルド
今回紹介した修正方法は以上三つ。
getTokenでトークンが取得できない原因は以上の三つの中のどれかだと思っています。