UnityにAdmobのインタースティシャル広告を実装する方法。およびGoogle Play Consoleでの設定方法について。備忘録
1.
以下のサイトから最新のプラグインパッケージをダウンロード
https://github.com/googleads/googleads-mobile-unity/releases
GoogleMobileAds-v8.5.3.unitypackage(こんな名前のやつ)
2.
Unity > Asset > Import Package > custom packageで上記のunitypackageを選択。全部チェックマーク
Assets > Google Mobile Ads > settings アプリIDを設定。(これはAdmobで入手)
Assets > External Dependency Manager > Android Resolver > Resolve
Hierarchy > Create Empty、名前を「AdmobManager」とかなんとかつけて、スクリプト(後記)をアサイン。
Player Settings > Publishing setting > Custom Main Manifest にチェック
そしたら、Project > Asset > Plugins > Android > AndroidManifest.xmlを開いて、以下を追記。
~~省略。
</application>のあとに。
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
Player Settings > Publishing Setting > Minify すべてチェックしない。
3.
実装スクリプトについては以下のサイトから引用しました。わかりやすかったです。
https://ameblo.jp/mitsuhide-19960828/entry-12816350309.html
下はgoogleのサイト。
https://developers.google.com/admob/unity/interstitial?hl=ja
インタースティシャル広告のスクリプト-------------------------------------------------
ゲームオーバーのタイミングとか、スコアの切れ目のいいタイミングで、下の関数をどこかのスクリプトで呼び出せばOK.
//広告関係
[SerializeField] private AdmobManager admobManager; // UnityでAdmobManagerゲームオブジェクトをアサイン。
admobManager.ShowAd() //これをどこかのタイミングで入れる。
ーーーーここから。-----
using UnityEngine;
using GoogleMobileAds.Api;
using System;
public class AdmobManager : MonoBehaviour
{
// これらの広告ユニットは、常にテスト広告を配信するように設定されています。
#if UNITY_ANDROID
private string _adUnitId = "ca-app-pub-3940256099942544/1033173712";//ここに本番のID入れる。
#elif UNITY_IPHONE
private string _adUnitId = "ca-app-pub-3940256099942544/4411468910";
#else
private string _adUnitId = "unused";
#endif
private InterstitialAd interstitialAd;
/// <summary>
/// Loads the interstitial ad.
/// </summary>
public void Start()
{
// Google Mobile Ads SDK を初期化します。バナーかインタースティシャルどちらかで初期化すればよい。
MobileAds.Initialize((InitializationStatus initStatus) =>
{
// このコールバックは、MobileAds SDK が初期化されると呼び出されます。
});
LoadInterstitialAd();
Debug.Log("広告をロード");
}
public void LoadInterstitialAd()
{
// 既にロードされている広告があれば破棄します。
if (interstitialAd != null)
{
interstitialAd.Destroy();
interstitialAd = null;
}
Debug.Log("インタースティシャル広告を読み込んでいます。");
// 広告を読み込むために使用するリクエストを作成します。
var adRequest = new AdRequest();
adRequest.Keywords.Add("unity-admob-sample");
// 広告を読み込むリクエストを送信します。
InterstitialAd.Load(_adUnitId, adRequest,
(InterstitialAd ad, LoadAdError error) =>
{
// エラーが null でない場合、ロード リクエストは失敗しました。
if (error != null || ad == null)
{
Debug.LogError("インタースティシャル広告が広告を読み込めませんでした " +
"with error : " + error);
return;
}
Debug.Log("レスポンスを伴うインタースティシャル広告が読み込まれる : "
+ ad.GetResponseInfo());
interstitialAd = ad;
RegisterEventHandlers(interstitialAd);
Debug.Log("イベントハンドラーの登録");
RegisterReloadHandler(interstitialAd);
Debug.Log("ロードハンドラーの登録");
});
}
/// <summary>
/// Shows the interstitial ad.
/// </summary>
public void ShowAd() // この関数を呼び出してやればよい。
{
if (interstitialAd != null && interstitialAd.CanShowAd())
{
Debug.Log("インタースティシャル広告を表示しています。");
interstitialAd.Show();
}
else
{
Debug.LogError("インタースティシャル広告はまだ準備ができていません。");
}
}
//イベントハンドラーの登録
private void RegisterEventHandlers(InterstitialAd ad)
{
// 広告が収益を上げたと推定される場合に発生します。
ad.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("Interstitial ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// 広告のインプレッションが記録されるときに発生します。
ad.OnAdImpressionRecorded += () =>
{
Debug.Log("インタースティシャル広告がインプレッションを記録しました。");
};
// 広告のクリックが記録されたときに発生します。
ad.OnAdClicked += () =>
{
Debug.Log("インタースティシャル広告がクリックされました。");
};
// 広告が全画面コンテンツを開いたときに発生します。
ad.OnAdFullScreenContentOpened += () =>
{
Debug.Log("インタースティシャル広告の全画面コンテンツが開きました。");
};
// 広告が全画面コンテンツを閉じたときに発生します。
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("インタースティシャル広告の全画面コンテンツが閉じられました。");
};
// 広告が全画面コンテンツを開けなかった場合に発生します。
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("インタースティシャル広告が全画面コンテンツを開けませんでした " +
"with error : " + error);
};
}
private void RegisterReloadHandler(InterstitialAd ad)
{
// 広告が全画面コンテンツを閉じたときに発生します。
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("インタースティシャル広告の全画面コンテンツが閉じられました。");
// できるだけ早く別の広告を表示できるよう、広告をリロードしてください。
LoadInterstitialAd();
};
// 広告が全画面コンテンツを開けなかった場合に発生します。
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("インタースティシャル広告が全画面コンテンツを開けませんでした " +
"with error : " + error);
// できるだけ早く別の広告を表示できるよう、広告をリロードしてください。
LoadInterstitialAd();
};
}
}
// ここまでインタースティシャル広告。
4.
Google Play Consoleにて。
広告ID:
広告IDを使用しています。「はい」
該当するもの:「広告、マーケティング」
データセーフティ:
データ収集しますか「はい」
転送時に暗号化されますか「はい」
(任意)の質問は不回答でもいいかもしれないが、ユーザーにデータ削除方法を提供しているか「いいえ」
収集するデータの種類
場所
おおよその現在地
アプリのアクティビティ
アプリ インタラクション数
その他の操作
アプリの情報、パフォーマンス
クラッシュログ
診断情報
その他のアプリのパフォーマンス データ
デバイスまたはその他の ID
デバイスまたはその他の識別子
全項目共通事項
収集しますか「収集」
データを一時的に処理しますか「いいえ」
データ収集は必須
データを収集するのはなぜか?
おおよその現在地「分析」「広告、マーケティング」
クラッシュログ「分析」
診断情報「分析」
その他のアプリパフォーマンス「分析」
アプリインタラクション数「分析」「広告、マーケティング」
その他の操作「分析」「広告、マーケティング」
デバイスまたはその他のID「分析」「広告、マーケティング」
参考サイト
https://apps.jp.net/introduction/admob-data-safety-section/
https://developers.google.com/admob/android/privacy/play-data-disclosure?hl=ja
(こちらはグーグルのサイト。ここに「~~を収集します」と書いてあるので、共有ではなく収集と判断しました)
(一時的な処理か否かについては、ユーザープロファイルがどうのこうのは一時的な処理じゃない的な文章があったので「いいえ」と判断)
(データ収集理由については、「分析」「広告」のほかに「不正防止」も追加してもいいかもしれない)
っていうか、Admobの場合は「Admobのみを使用していますか「はい」」だけでいいと思うけどね、改善希望!