admobとfirebaseの競合によるエラーについて(Cordova)

こんにちは!Cowboyです!

今回はCordovaでのアプリ開発における自分用の忘備録を兼ねた記事です。

Android のアプリ開発にはCordovaを利用していますが、Cordovaのバージョンが7.0になった時に大幅な変更点があり、プラグイン使用時にエラーが起きることが多くなりました。

先日Android版のVibronomeを更新してbuildしたところ、com.google.android.gms関連でエラーが起きてアプリが起動しなくなりました。cordova-androidを入れ直したり、プラグインを入れ直したり、プラグインやCordova自体をバージョンアップしたりすると、同じようにcom.google.android.gmsのエラーが起きたり、アプリ自体は起動するが数秒後に落ちたり、と安定しない症状が続きました。

今までの経験から、何かのプラグインが悪さをしているのだろうと思い、一つ一つアンインストールしたりして調べていたところ、 admob プラグインとfirebase プラグインを同時使用した時にこの症状が起きることがわかりました 。
ちなみに実際に使用していたのはcordova-plugin-admob-free と cordova-plugin-firebase です。

どちらか一方を消せば正常に起動することはわかったのですが、広告も出したいしトラフィックデータも取得したい。
ネットで検索すると、別のfirebaseのプラグイン(cordova-plugin-fcm)のGithub上でも話題になっていました。

Conflict with abmobpro #214

"I think that the problem is: android.gms:play-services-ads is a part of firebase now:https://firebase.google.com/docs/admob/admob-firebase
Solution is changing android.gms:play-services-ads to com.google.firebase:firebase-ads if you use firebase in your project. I created fork of cordova-admob-pro plugin to demonstrate it. punksta/cordova-admob-pro@aa64fa3"


admobが使っている android.gms:play-services-ads はfirebaseの一部なので、参照する際にバージョン違いか何かの競合が起き、このような症状が起きていると推測されています。
解決策としては、android.gms:play-services-ads をfirebase:firebase-ads に書き換えると良いらしい。

というわけでcordova>androidのフォルダにあるproject.properties の中に記述されていたcom.google.android.gms:play-services-adsの部分をcom.google.firebase:firebase-adsと書き換えました。

僕の環境下では書き換え後はこの様になりました。
----------------------------------------------------------------------------------------------------
target=android-26
android.library.reference.1=CordovaLib
cordova.system.library.1=com.google.gms:google-services:+
cordova.system.library.2=com.google.android.gms:play-services-tagmanager:+
cordova.gradle.include.1=cordova-plugin-firebase/vibronome-build.gradle
cordova.system.library.3=com.google.firebase:firebase-core:+
cordova.system.library.4=com.google.firebase:firebase-messaging:+
cordova.system.library.5=com.google.firebase:firebase-crash:+
cordova.system.library.6=com.google.firebase:firebase-config:+
cordova.system.library.7=com.google.firebase:firebase-perf:+
cordova.system.library.8=com.google.android.gms:play-services-base:11.0.4
cordova.system.library.9=com.google.firebase:firebase-ads:+
-----------------------------------------------------------------------------------------------------

一番下のcordova.system.lybrary.9が書き換えた箇所です。
「com.google.android.gms:play-services-ads:11.0.4」ように数字が入っていた場合は、環境下によってはadmobとfirebaseのバージョンが違うことによりエラーが出たので「com.google.firebase:firebase-ads:+」 のようにしたほうが良いでしょう。

書き換えた後、念のため cordova cleanを実行した後buildしたところ、正常にアプリが起動するようになりました。

ちなみに別のPCでの環境下では、そもそもこのような症状自体が現れなかったので、プラグインが参照するファイルの競合が起きないときもあるみたいです。そのへんはよくわかりませんね(・_・;)

もしadmob関連のプラグインとfirebase関連のプラグインを同時に使用している場合に、正常にbuildできなくなった場合は、今回のようにproject.propertiesを書き換えることで解決するかもしれません。

以上cowboyでした!
うぇいうぇいうぇい☆

記事が良かったなら↓をクリックして応援願いますm(_ _)m