firebaseとアプリを連携したかったので公式に従って進めていたところ
ビルド中に以下のようなエラーが発生した。
File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it
アプリの登録手順は以下の通り
①firebaseプロジェクトに自アプリ(android)を登録
②ダッシュボードからgoogleSevice.jsonを取得後アプリ直下にコピー
③プラグインにcordova-plugin-fcmを追加して以下のようにindex.jsにトークンを取得
</pre> window.FCMPlugin.getToken(function (token) { console.log(token); }); window.FCMPlugin.onNotification(function (data) { if (data.wasTapped) { window.localStorage.setItem('noticeCategory', data.category); } }); <pre>
エラーを見る限りgoogleSevice.jsonを探したけどアプリ直下に無いよと言われてるっぽい。
取得したgoogleSevice.jsonは確かにアプリ直下に追加したのですが、上手く認識してくれない模様。
プラグインがplatformsに上手く入っていないと思いcordova platforms rm android後
cordova plugin add androidをしてプラットフォームを再生成。
再度ビルドをするも・・・失敗。
他の作ったアプリとgradleファイルを比較してみると、implementationしているライブラリに
少し差異を発見。
ather app↓
implementation “com.google.firebase:firebase-core:16.0.8”
implementation “com.google.firebase:firebase-messaging:17.5.0”
current app↓
implementation “com.google.firebase:firebase-core:+”
implementation “com.google.firebase:firebase-messaging:+”
よく見るとatherappではバージョン指定をしていて、今エラーがでているアプリは+指定で呼び出している。
でatherappのようにバージョンを指定するとエラーが解消された。
どうやら、この呼び方だと常に最新のライブラリを呼び出してくるらしく、それに含まれた機能が
googleService.jsonを見つける機能が消されていて無かった。もしくは違うロジックで間違ったフォルダを
探していたと思われます。
+で設定していると思わぬ依存関係のエラーが生まれるという訳ですね。
firebase系のライブラリがどのように変わっていくのかは詳しくは分かりませんが、今後も最新のライブラリ(+)を指定するときは
依存関係に引っかからないかよく確かめないといけないということですね。