ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

【2020年度版】NCMB Unity SDK とAdmobの競合解決

f:id:mbaasdevrel:20190123144504p:plain

コミュニティに寄せられるUnity関係の質問で多いのが、Unity SDKとAdmobの競合問題です。Unity SDK が AndroidXに対応し、プラグインの競合が起きにくくなりましたので、競合を解決しながら共存できる実装方法を紹介します。

検証環境

今回は以下の環境で、検証を行います。

競合を解決した実装方法

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 を使用し、広告を実装します。

以下の画像のように広告が表示されれば解消完了です🎉🎊🎉 f:id:mbaasblog:20200421152248p:plain:w300

動作確認後のつまづきポイントの解消

1度動作確認したにも関わらず広告が表示できなくなったり、ビルドが出来なくなったため以下のように解消しました。

その1. 競合解決時に削除したファイルが元に戻ってしまう場合

競合を解決したにもかかわらず、削除したファイルが再度ビルドする際に戻ってしまう現象が起きました。
Assets > Play Services Resolver > Android Resolver > Settings 内の、以下の画像内の Enable Auto-ResolutionEnable Resolution On Build の ✅を外すことで解決しました。 f:id:mbaasblog:20200421152851p:plain:w500

その2. INSTALL_FAILED_NO_MATCHING_ABIS がビルド時に出る場合

シミュレータ使用する場合はarchitectureのセッティングをする必要があります。 File > Build Settings > Player Settings > Configuration 内の Target Architecture にて、以下の画像のように ARMv7x86 に ✅することで、エラーが出なくなります。 f:id:mbaasblog:20200423160638p:plain

おわりに

無料アプリの収入は、アプリ内課金か広告収入が基本になると思います。アプリ内課金はiTunes Connectの導入や、課金アイテムの管理及び運用をしなければならず大変です。広告収入であれば、連携し広告の管理をするだけで収益化可能ですので、Admobの導入に挑戦しましょう!
この記事を参考に皆さん競合解決できましたでしょうか?もし今後もエラーが出る、または別問題で分からないことがあれば、コミュニティを活用してみてください。今後ともNIFCLOUD mobile backend をどうぞよろしくお願いいたします。

f:id:mbaasblog:20200421151926j:plain

小林 将弥

2019年度入社、NCMB駆け出し社員。 趣味はゲームエンジンのUnityでハンゲームを作成することと、FPSゲームの特訓です。最近はUnreal Engineに興味を持ちNCMBと連携できないか構想中です。一人前になれるように頑張っていきます!!