Unity6xでAdmobをUPM経由、FireBaseのアナリティクスとFCMを.unitypackageで入れた際にほぼ1週間ほど躓いて死にかけたので備忘録。
各種環境
- Unity:Ver6000.0.13f1-preview
- Admob:Google Mobile Ads for Unity: [9.2.0] (UPM経由)
- Firebase
- Google Analytics: [12.1.0]
- Firebase Cloud Messaging: [12.1.0]
解決方法
いくつか手順ありますが、とりあえず効果がありそうなものから記載します。
方法1:AndroidManifest.xmlの修正
自身のAndroidManifestと見比べて修正してみてください。
おそらく”<property android:name=”android.adservices.AD_SERVICES_CONFIG”の部分が不足してエラーが出ていることがほとんどかと。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" package="自身のバンドルID"
android:versionCode="1" android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/app_icon">
<!-- googleからアナウンスのあった解決方法.AdMobと他のgoogle軽サービスが競合するぽい(https://issuetracker.google.com/issues/327696048) -->
<property
android:name="android.adservices.AD_SERVICES_CONFIG"
android:resource="@xml/gma_ad_services_config"
tools:replace="android:resource" />
<!-- The MessagingUnityPlayerActivity is a class that extends
UnityPlayerActivity to work around a known issue when receiving
notification data payloads in the background. -->
<activity android:name="com.google.firebase.MessagingUnityPlayerActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<!-- FirebaseMessagingService: FCMからのメッセージを受信し、アプリ内で処理を行うためのエントリーポイント -->
<service android:name="com.google.firebase.messaging.FirebaseMessagingService"
android:exported="false">
</service>
<!-- MessageForwardingService: アプリがバックグラウンドで実行されているときに、FCMからのメッセージを処理するサービスで、JobSchedulerを利用してメッセージをキューイングする -->
<service android:name="com.google.firebase.messaging.MessageForwardingService"
android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false">
</service>
<!-- AdmobのAndroidの広告ID-->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="Androidの広告ID(ca-app-pub-xxxxx的なやつ)" />
</application>
</manifest>
下みたいなエラーの場合は上記のpropertyタグを追加したら大丈夫
https://issuetracker.google.com/issues/327696048
/Users/xxxxxx/Library/Bee/Android/Prj/IL2CPP/Gradle/launcher/src/main/AndroidManifest.xml:92:13-59 Error:
Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/gma_ad_services_config) from [com.google.android.gms:play-services-ads-lite:23.2.0] AndroidManifest.xml:92:13-59
is also present at [com.google.android.gms:play-services-measurement-api:22.0.2] AndroidManifest.xml:32:13-58 value=(@xml/ga_ad_services_config).
Suggestion: add 'tools:replace="android:resource"' to <property> element at AndroidManifest.xml to override.
方法2:UPMとFirebaseのプラグインの導入順を考えてみる
まずは工程のみ書くので、補足が必要な箇所は詳しい方法をちょこちょこ下に書きます
- Admob -> Firebase関連の順番でインストールしてみる (*1)
- ※Firebaseインポート時は念の為External DependencyManagerは含まないようにしてください
- 再インストール後に一旦Unityを閉じて、プロジェクトルートのLibraryディレクトリを削除
- Unityを再起動
- ビルドターゲットをAndroidに再設定
- ProjectSettings->Player->Publish SettingsのBuildの下記項目にチェック
- Custom Main Gradle Template
- Custom Gradle Properties Template
- Unity->Assets->External DependencyManager -> Android Resolver -> Resolveを実施
- ビルド
- mainGradleをアップデートする?とかなんかダイアログが出たらとりあえずenableかOKで大丈夫です
- それでもなんかエラーが出たらまたUnityを閉じてLibralyディレクトリを削除して再起動でビルド(なんかゴミが残ることがあるっぽい)
*1.各ファイルの削除に関して
AdmobのUPMのインストール手順にあるように、いくつかディレクトリを消しておく必要があります。
具体的には下記のディレクトリとファイルを先に消しておくといいです。
やり方は普通に消してもいいですが、私は画像のようにUnity->Assets->External DependencyManager -> Version Handler -> Uninstal…でFirebase関連を消しました。
AdmobはPackageManagerから削除し、上で説明した手順でインポートを再実施。
消すやつ
Assets/ExternalDependencyManager
Assets/GoogleMobileAds
Assets/Plugins/Android/googlemobileads-unity.aar
Assets/Plugins/Android/GoogleMobileAdsPlugin
Assets/Plugins/iOS/GADUAdNetworkExtras
Assets/Plugins/iOS/unity-plugin-library.a
解決までに起きていたエラーや現象
他に似たような現象で困っている人がいたときの検索用で一応残します
- iOSビルドはできるがAndroidビルド時にフリーズする(エラーは特に出ない)
- 多分SDKの競合やゴミが残っている(Firebase側のExternal DependencyManagerとAdmobのExternal DependencyManagerが入ってたときにフリーズしまくりました)
- “Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value”みたいなエラーが出まくる
- AndroidManifestを上で説明している形式にしたらなんとかなりました
- Admobのメタデータが抜けていたり、Firebaseと競合していたり
コメント