5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-03

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系を削除すればいけるのですがはまることが多くてやっかいです。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?