コミュニティに寄せられるUnity関係の質問で多いのが、Unity SDKとAdmobの競合問題です。Unity SDK が AndroidXに対応し、プラグインの競合が起きにくくなりましたので、競合を解決しながら共存できる実装方法を紹介します。
検証環境
今回は以下の環境で、検証を行います。
- macOS Mojave バージョン 10.14.4
- Google Mobile Ads Unity Plugin v4.2.0
- Unity SDK v4.1.0
- エミュレーター Pixal 3a API 29 (Play Storeに対応しているデバイスを選択)
競合を解決した実装方法
NCMBのUnity SDK 導入とAdmob Pluginのライブラリを導入後発生してしまう競合の解決方法を解説します。
なぜ競合が起こるか知りたい方は下記の記事を合わせてご閲覧ください。 blog.mbaas.nifcloud.com
NCMBとAdmob Plugin導入後に発生するエラーの解消
まず、Unityエディタで File > Build Settings >Androidを選択 > Switch Platform でプラットフォームを変更します。
次に Assets > Play Services Resolver > Android Resolver > Force Resolve を実行します。
その時、Admob PluginのライブラリがAssets/Plugins/Android/へダウンロードされます。
この時私の環境ではForce Resolveが失敗し2つのエラーと格闘しました。
その1. Android dependency resolution failed
your application will probably not run. Android SDK path must be set to a valid directory ({none})
このエラーはSDKへのパスが間違っている時に起きます。これを解決するには以下の手順で解消することができます。
Unityエディタで Preference > External Tools > Android SDK で Android SDK Tools Installed with Unity (recommended) の ✅ を外し、Android SDKをインストールしたところへBrowseしてください。その後Force Resolveを再試行します。
その2. Gradle failed to fetch dependencies.
Failed to run '/YOUR_PATH/Temp/PlayServicesResolverGradle/gradlew --no-daemon -b "/YOUR_PATH/Temp/PlayServicesResolverGradle/PlayServicesResolver.scripts.download_artifacts.gradle" "-PANDROID_HOME=/YOUR_PATH/Library/Android/sdk" "-PTARGET_DIR=/YOUR_PATH/Assets/Plugins/Android" "-PMAVEN_REPOS=https://maven.google.com/" "-PPACKAGES_TO_COPY=com.google.android.gms:play-services-ads:18.3.0" "-PUSE_JETIFIER=0" "-PDATA_BINDING_VERSION=3.4.0"' stdout: Unzipping /YOUR_PATH/.gradle/wrapper/dists/gradle-5.1.1-bin/90y9l8txxf~~~~_YOUR_PATH/gradle-5.1.1-bin.zip to /Users/"YOUR_PATH"/.gradle/wrapper/dists/gradle-5.1.1-bin/90y9l8txxf~~~~_YOUR_PATH
エラー内のUnzippingに出てきたPATHの gradle-5.1.1-bin.zip と gradle-5.1.1-bin.zip.lck を削除後、Force Resolveを再試行します。
※YOUR_PATH はお客様のエラーログに出てくるPATHを使用します
$ cd /YOUR_PATH/.gradle/wrapper/dists/gradle-5.1.1-bin/90y9l8txxf~~~~_YOUR_PATH/ $ rm gradle-5.1.1-bin.zip $ rm gradle-5.1.1-bin.zip.lck
NCMBとAdmob Plugin導入後に発生する競合の解消
私の環境では以下の Assets/Plugins/Android/ にてconflictが起きました。
※下記はあくまで一例です。
ncmb_unity_v4.1.0 | Google-Mobile-Ads-Unity-Plugin_v4.2.0 |
---|---|
core-1.1.0.aar | androidx.core.core-1.0.0.aar |
collection-1.0.0.jar | androidx.collection.collection-1.0.0.jar |
legacy-support-core-utils-1.0.0.aar | androidx.legacy.legacy-support-core-utils-1.0.0.aar |
play-services-basement-17.1.1.aar | com.google.android.gms.play-services-basement-17.0.0.aar |
play-services-tasks-17.0.0.aar | com.google.android.gms.play-services-tasks-17.0.0.aar |
今回はncmb_unity_v4.1.0側のライブラリを残し、Google-Mobile-Ads-Unity-Plugin_v4.2.0側の以下のライブラリを削除しました。
- androidx.core.core-1.0.0.aar
- androidx.collection.collection-1.0.0.jar
- androidx.legacy.legacy-support-core-utils-1.0.0.aar
- com.google.android.gms.play-services-basement-17.0.0.aar
- com.google.android.gms.play-services-tasks-17.0.0.aar
ビルドする時にコンフリクトが発生すれば、UnityのConsole内のエラーログをもとに適当なライブラリを削除することになります。削除し、無事ビルドが通ればconflictの解消は完了です。
テスト広告にて動作確認
Admobの広告を自分で作成すると数日経たないと広告が許可されなかったり、残高がなくなると表示されなくなることがあります。そのため公式ページのスタートガイドとバナー広告に沿って実装し、Admobテスト用広告の サンプル広告ユニット ID を使用し、広告を実装します。
以下の画像のように広告が表示されれば解消完了です🎉🎊🎉
動作確認後のつまづきポイントの解消
1度動作確認したにも関わらず広告が表示できなくなったり、ビルドが出来なくなったため以下のように解消しました。
その1. 競合解決時に削除したファイルが元に戻ってしまう場合
競合を解決したにもかかわらず、削除したファイルが再度ビルドする際に戻ってしまう現象が起きました。
Assets > Play Services Resolver > Android Resolver > Settings 内の、以下の画像内の Enable Auto-Resolution と Enable Resolution On Build の ✅を外すことで解決しました。
その2. INSTALL_FAILED_NO_MATCHING_ABIS がビルド時に出る場合
シミュレータ使用する場合はarchitectureのセッティングをする必要があります。 File > Build Settings > Player Settings > Configuration 内の Target Architecture にて、以下の画像のように ARMv7 と x86 に ✅することで、エラーが出なくなります。
おわりに
無料アプリの収入は、アプリ内課金か広告収入が基本になると思います。アプリ内課金はiTunes Connectの導入や、課金アイテムの管理及び運用をしなければならず大変です。広告収入であれば、連携し広告の管理をするだけで収益化可能ですので、Admobの導入に挑戦しましょう!
この記事を参考に皆さん競合解決できましたでしょうか?もし今後もエラーが出る、または別問題で分からないことがあれば、コミュニティを活用してみてください。今後ともNIFCLOUD mobile backend をどうぞよろしくお願いいたします。