Help us understand the problem. What is going on with this article?

UnityでNiftyのmBaaS(NCMB)とAdMobの競合を解決して利用する

More than 1 year has passed since last update.

NiftyのmBaas(以降NCMB)プラグインをUnityで導入することにより、手軽にプッシュ通知などの機能が利用可能です。
既にAdMob等を導入している環境等で導入した場合、競合などによりビルドエラーや実行時エラーを起こす問題を乗り越えて利用するまでの道のりです。

Description

UnityでNCMBのPluginを導入することによりでiOS/Android向けに様々な機能が利用できます。Push通知もその一つです。
UnityでNCMBを利用する
NCMB Unity Package

ところが上記のマニュアル等を参考に導入しようとしても、AdMob等の広告を既に導入している場合には高確率で競合によるエラーでビルドができません。
この解決方法が意外とやっかいなので以下に手順を残します。
 おおまかには以下の流れです。
-admobで使用するaar等を削除
-Niftyで使用aar等導入
-PlayServiceResolverでよしなに解決


<動作環境>

  • Unity5.6.3p4
  • Google Mobile Ads Unity Plugin v3.9.0
  • NCMB v3.1.1 (Nifty mBaas Unity plugin)
  • Android7.x/iOS11.x

設定方法

1.AdMob関連のjar/aarを削除する
 Assets/Plugins/Android/以下にあるAdMob導入時のjar/aarを一旦削除します
 play-service-xxxやsupport-yyyが該当します。
 私は該当フォルダのファイルを一旦全て削除しました。

2.NCMBのプラグインを導入します
 NCMBのプラグインを導入します。今回はv3.1.1でした。
 導入後は、Asset/Plugins/Androidフォルダに下記のファイルが展開されています。

 ※ play-service-base-xxxを削除すると競合が解決してビルドできますが、NCMBを呼び出すと実行時に落ちます。

3.Asset/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xmlを編集する

NCMBで導入されたplay-service-xxx系のバージョンに合わせます。ここでは11.6.0を11.0.0にします。
変更前

<androidPackage spec="com.google.android.gms:play-services-ads:11.6.0">

変更後

<androidPackage spec="com.google.android.gms:play-services-ads:11.0.0">

  1. PlayServiceResolverでAdMob関連のaarを再導入する Assets/Plugins/Androidを右クリックして表示されるメニューより PlayServiceResolver->Android Resolver->Resolveを実行します  

 実行後は、以下のようにファイルが配置されます。
 

5.各AndroidManifest.xmlのtargetSdkVersionを統一する
-Assets/Plugins/Android/AndroidManifest.xml
-Assets/Plugins/Android/NcmbGcmPlugin.aar内のAndroidManifest.xml
-Assets/Plugins/Android/GoogleMobileAdsPlugin/AndroidManifest.xml
-その他導入済みのものがあれば

 AdMob導入時に既に実施しているかもしれませんが、メインとなるPlugins/Android直下のAndroidManifest.xmlと他のAndroidManifest.xmlで
targetSdkVersionが異なるとビルドエラーになります。
具体的には下記のような記述です。今回はNCMBのものが26になっていましたが25で統一しました。

 

 ここで問題になるのが、NcmbGcmPlugin.aarの中にあるAndroidManifest.xmlの変更です。
 実はaarファイルは単なるzip圧縮ファイルです。拡張子をzipに変更してさくっと解凍しちゃいましょう。
 解凍すると以下のようなファイルが確認できます。

 このAndroidManifest.xmlはv3.1.1ではtargetSdkが26なので25に変更します。
 変更後は、再度zipで圧縮してaarに拡張子を変えればOKです。私は7-zipを利用しました。
 
 注意点として、zip圧縮時は上記のフォルダ群を選択して直接圧縮してください。展開時にNcmbGcmPliuginといった名前などでルートフォルダを生成した場合
 そのルートフォルダを圧縮してしまうとフォルダ構成がおかしくなり、ビルド時に見慣れないエラーがでます。
 
 windowsであればこんな感じでZIPを作成します。

以上で無事ビルドができ、アプリの実行およびプッシュ通知の確認、AdMobの表示も問題なく実行できました。

最後に

 最近まで、たまたまNCMBとAdMobを同時に使うことがありませんでしたが、よく使われるのではと思います。
 Googleのplay-service-xxx系は色々と競合をおこしやすいのでやっかいなのですが、今回のは特に面倒で1日半ほど時間がかかりました。
 大概は、競合していそうなplay-service-xxx系を削除すればいけるのですがはまることが多くてやっかいです。

hmcGit
Unity,RogueLike,ガジェット好き
http://www.alice3.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした