AdMobとNCMBが競合する場合の対処法
筆者が作ったスマホ用ゲーム「バードドロップ」では、まずAdMobで広告を実装した状態でリリースしました。
アップデートでNCMBの QuickRanking をベースに改造したスコアランキング機能を追加。Unityのエディター上とiOS実機での動作確認を終え、Android実機用にビルドを始めると500件以上のエラーが!どうやらAdMobとNCMBの競合が起きていたようです。
筆者の環境:Unity 2019.3.5f1 AdMob Ver.4.1.0 NCMB Ver.4.0.4
Unityコンソールの赤いエラーログの多くが Duplicate class android〜、Duplicate class com.google.android〜、Duplicate class com.google.firebase〜 といった内容で、Androidライブラリ(AARファイル)が重複しているのが原因のようです。
エラーログ毎に指摘されていてる2つのファイルのうち、それぞれバージョンが小さい(NCMBで追加された)方を削除しました。
残す com.google.android.gms.play-services-basement-17.0.0.aar 削除 play-services-base-15.0.1.aar |
残す com.google.android.gms.play-services-basement-17.0.0.aar 削除 play-services-basement-15.0.1.aar |
残す com.google.android.gms.play-services-measurement-base-17.1.0.aar 削除 play-services-measurement-base-15.0.0.aar |
残す com.google.android.gms.play-services-measurement-base-17.1.0.aar 削除 firebase-analytics-impl-16.0.0.aar |
残す com.google.android.gms.play-services-tasks-17.0.0.aar 削除 play-services-tasks-15.0.1.aar |
残す androidx.core.core-1.0.0.aar 削除 support-compat-26.0.2.aar |
これで Build、および Build And Run を実行しても赤いエラーが0になりました。しかし、Android実機でアプリを起動するとすぐにクラッシュして 「アプリ名」が繰り返し停止しています と表示されます。
この競合問題を扱ったブログ記事をいくつか読み、一番参考になったのが yjkymさんの記事 でした。この記事では、NCMBのパッケージをインポートする際に予め不要なファイルを取り除いているのですが、上記表の6つの削除するファイルの他に、3つのファイルを除外するとありました。
firebase-common-16.0.0.aar
firebase-messaging-17.1.0.aar
support-core-utils-26.0.2.aar
試しにこの3ファイルを削除して Build And Run を実行するとアプリが正常に起動し、広告表示(バナー/インタースティシャル/リワード動画)とランキングの更新/表示ができました!yjkymさんにはカロリーメイトあげたい。
ここで一件落着とすることもできますが、この3ファイルの役割がよくわからず、気づかないところで不具合が出たらやだなぁと思ったので、1つずつファイルを元の Plugin/Android/ フォルダに戻してビルドし検証してみました。
その結果、この2ファイルは Plugin/Android/ フォルダに存在してもアプリが起動し広告表示(上記3種)とランキングの更新/表示ができました。
firebase-messaging-17.1.0.aar
support-core-utils-26.0.2.aar
しかし、firebase-common-16.0.0.aarを Plugin/Android/ フォルダに戻すと再びアプリ起動時のクラッシュが発生。
play-services-base-15.0.1.aar
play-services-basement-15.0.1.aar
play-services-measurement-base-15.0.0.aar
play-services-tasks-15.0.1.aar
firebase-analytics-impl-16.0.0.aar
firebase-common-16.0.0.aar
support-compat-26.0.2.aar
※あくまで筆者の環境・動作確認した範囲なので、ご自分でエラーログの対象ファイルや実機での確認を行ってください。
追記
AndroidManifestについてはプロジェクトに存在するのがNCMBインポート時に Plugin/Android/ フォルダ へ追加されるAndroidManifest.xmlひとつだけで、内容はいじらずにビルドできました。
(package=”YOUR_PACKAGE_NAME” のまま、minSdkVersion=”14″ のまま)
GoogleMobileAdsDependenciesについても内容はいじらず、NCMBに含まれるAARのバージョンに合わせていません。
(androidPackage spec=”com.google.android.gms:play-services-ads:18.2.0″ のまま)
さらに追記
ビルドしたAPKファイルを Google Play Console にアップロードすると「デバッグ可能な APK または Android App Bundle をアップロードしました。」とのエラーが。
AndroidManifest.xml内の android:debuggable=”true” をfalseに書き換えると解決します。
ディスカッション
コメント一覧
まだ、コメントがありません