はじめに
UnityでAdMobや各メディエーションSDKを使っていると、多くのエラーに出会します。ビルドできなかったり、端末で動画が再生されなかったり…(特にAndroid)。その対処法の一例です。AdMobメディエーションを使用していて、端末でエラーが起こる際の基本対応をご紹介します。
主にAndoroidについての話になります。
- 環境
- Android ビルド
- Google Mobile Ads Unity Plugin 7.0.2
- FacebookAudienceNetworkUnityMediationPlugin 3.7.0 (Meta Audience Network)
- Facebook Android adapter version 6.10.0
- Google Mobile Ads SDK version 20.6.0
- Facebook Android adapter version 6.10.0
先にまとめ
- 「Google Mobile Ads SDK」のバージョン互換を確認する
- “実際にインポート”された「Androidプラグイン」のバージョンを確認する
- 「Dependencies」のバージョン部分を編集してみる
- 各メディエーションの仕様を確認する
2種類のプラグイン
「Google Mobile Ads Unity Plugin」について
「Google Mobile Ads Unity Plugin」は、AdMobをUnityに組み込むためのプラグインです。主に3つの要素で構成されています。
- Google Mobile Ads Unity Plugin x.x.x
- Google Mobile Ads Android SDK x.x.x
- Google Mobile Ads iOS SDK x.x.x
- External Dependency Manager for Unity x.x.x
「Unity Mediation Plugin」について
「Unity Mediation Plugin」は、AdMobを媒介にして他社の動画を配信するためのアダプターSDKです。主にAndroidとiOSの2つの要素で構成されています。さらにそれぞれ対応する「Google Mobile Ads SDK」があります。
- *** Unity Mediation Plugin x.x.x
- *** Android adapter x.x.x
- Google Mobile Ads Android SDK x.x.x
- *** iOS adapter x.x.x
- Google Mobile Ads iOS SDK x.x.x
- *** Android adapter x.x.x
メディエーション実装をややこしくしている原因はバージョン管理が複数あるところです。「Mediation Pluginのバージョン」「 adapterのバージョン」「Google Mobile Ads SDKのバージョン」。重要なのは最後の「Google Mobile Ads SDKのバージョン」です。
端末でエラーが出た際に疑う箇所
「Google Mobile Ads SDK」のバージョン互換を疑う
「Google Mobile Ads Unity Plugin」の「Google Mobile Ads SDK」バージョンはスタートガイドの「プラグインをダウンロード」から確認できます。
今回の場合「Google Mobile Ads Unity Plugin v7.0.2」は「Google Mobile Ads Android SDK 21.0.0」に対応していました。
メディエーションの場合は、各メディエーションの統合説明ページの下部にプラグインをダウンロードできる場所があり、そのすぐ下にリンクがあるので、そこから「Facebook Android adapter」のバージョンではなく「Google Mobile Ads Android SDK」のバージョンを確認します。
今回の場合「Facebook Android adapter 6.10.0」は「Google Mobile Ads Android SDK 20.6.0」に対応していました。
下記で表にしてみました。
Google Mobile Ads Unity Plugin v7.0.2 | Google Mobile Ads Android SDK 21.0.0 |
Facebook Android Adapter verdion 6.10.0 | Google Mobile Ads Android SDK 20.6.0 |
この組み合わせの場合「Google Mobile Ads Unity Plugin v7.0.2」の方が「Google Mobile Ads Android SDK」の対応バージョンが上位なので「Facebook Android Adapter verdion 6.10.0」と互換性があるということがわかります。
“実際にインポート”された「Androidプラグイン」のバージョンを疑う
各SDKをインポートすると「External Dependency」によって自動的に「Androidプラグイン」がインポートされると思います。もしされない場合はAsset
>External Dependency Manager
>Android Resolver
>Resolve
またはForce Resolve
で「Androidプラグイン」を手動インポートしてください。
次にインポートされたプラグインのバージョンを目視で確認します。今回の場合、プラグインが「6.11.0」と「6.11.0.1」でした。
「Facebook Android Adapter」のバージョンは「6.10.0.0」なので、それより上位のバージョンのプラグインがインポートされてしまったことになります。(なぜ?…このような例はよくあります。)
確認したところ(InProgress)や(targetSdkVersion 31)など条件付きではありますが「Google Mobile Ads Android SDK 21.0.0」対応なので「Google Mobile Ads Unity Plugin v7.0.2」と互換性があることが分かりました。
こちらビルドしたところ問題なく端末で動きました。…スッキリしませんが動けばOKってことにします。おそらく「External Dependency Manager for Unity」が良い感じにやってくれたんでしょう。ただ、悪い感じにやってくれる時もあるので注意が必要です。
もし互換性が無かったり、端末でエラーが出る場合は、
「Dependencies」のバージョン部分を編集してみる
Assets
>GoogleMobileAds
>Editor
から「FacebookMediationDependencies」をVScodeなどで開いて、バージョン部分を修正したり、[]で固定するなど編集してみてください。
//実際の行
<androidPackage spec="com.google.ads.mediation:facebook:6.10.0.0">
//(例)下位バージョンに編集する
<androidPackage spec="com.google.ads.mediation:facebook:6.8.0.1">
//(例)[]で囲んでバージョンを固定する
<androidPackage spec="com.google.ads.mediation:facebook:[6.10.0.0]">
Dependenciesを直接編集するのは有効な場合が多いです。お試しください。
各メディエーションの仕様を確認する
テスト広告は不安定です。何度かビルドして端末テストしていると広告が再生されなくなりました。Logcatを細かく見ると、いくつか警告が出ていました。
- Warn FacebookAdapter No fill
- Warn FacebookAdapter Ad was re-loaded too frequently
公式を確認したところ、エラーコードのまとめがありました。
https://developers.facebook.com/docs/audience-network/setting-up/test/checklist-errors/
Warn FacebookAdapter No fill
Deeple翻訳原文
Error 1001 - No Fill
. May be due to a number of reasons including:- User not logged into Native Facebook App on Mobile Device
- You have informed Facebook through the
setAdvertiserTrackingEnabled
flag to not deliver personalized ads via Audience Network. - The person did not give permission for Facebook to use their activity, that other apps and websites send to Facebook, to personalize the ads Facebook delivers to that person.
- No Ad Inventory for current user
- Your testing device must have the native Facebook application installed.
- Your application should attempt to make another request after 30 seconds.
エラー1001 - 塗りつぶしができません
。以下のような原因が考えられます。- ユーザーがモバイルデバイスのネイティブFacebookアプリにログインしていない。
setAdvertiserTrackingEnabled
フラグにより、Audience Network経由でパーソナライズされた広告を配信しないようFacebookに通知している。- 他のアプリやWebサイトからFacebookに送信される自分のアクティビティを使用して、Facebookがその人に配信する広告をパーソナライズすることを、その人が許可していない。
- 現在のユーザーの広告インベントリがない
- テストデバイスにネイティブのFacebookアプリケーションがインストールされている必要があります。
- アプリケーションは30秒後に再リクエストを試みる必要があります。
Warn FacebookAdapter Ad was re-loaded too frequently
Deeple翻訳原文
- Ad Requests are based on a combination of:
- Device ID
- Placement ID
- Display Format (Banner, Interstitial, Native)
- Your application should attempt to make another request after 30 minutes. We also suggest adjusting your Refresh Rate or Request Rate.
- 広告のリクエストは、以下の組み合わせに基づいて行われます。
- デバイスID
- プレースメントID
- 表示形式(バナー、インタースティシャル、ネイティブ)
- アプリケーションは、30分後に再リクエストを試みる必要があります。また、リフレッシュレートやリクエストレートを調整することをお勧めします。
読み込むタイミングを変えてみたり、時間を置いてビルドしてみたりしましたがダメ。試しにテスト端末にFacebookアプリをダウンロードしてログインしてみたところ無事再生されました…さっきまで再生されていたのにorz
まとめ
- 「Google Mobile Ads SDK」のバージョン互換を確認する
- “実際にインポート”された「Androidプラグイン」のバージョンを確認する
- 「Dependencies」のバージョン部分を編集してみる
- 各メディエーションの仕様を確認する
余談
このページをご覧になっている方は共感いただけると思いますが、AdMobのビルド周りのエラーは時間が溶けます。まずビルド自体に時間が掛かりますし、プラグインをインポートするのも時間が掛かりますし、広告の在庫切れの場合もありますし、各社の仕様が変わる場合もありますし、公式SDKにバグがある場合も多々あります。何よりクリエイティブじゃないのが辛いですね。時には対応を諦め、一旦寝かせたり、削除するなどの選択もありだと思います。出来るだけクリエイティブな事に時間を掛けるようにしましょう(自戒)
ちなみに今回 iOSでもまた違うエラーが出ました。。。