【Unity】Admobでアプリ起動時広告の配信方法

どうも、だらはです。
今回は、Admobでアプリ起動広告の配信方法についてまとめたいと思います。

スポンサーリンク

手順

先ずはAdmobのプラグインをダウンロード、インポートします。
以下の公式HPの「Mobile Ads Unity プラグインをインポートする」まで実施してください。
公式HPの解説が親切なので、こちらの解説は割愛とさせていただきます。

次に、以下の公式HPに記載のスクリプトをコピー&ペーストしていきます。
こちらは読み解くのが難しいかもしれないので、本記事にて補足します。

補足

下図を参考に、GameObjectに[GoogleMobileAdsDemoScript]をアタッチしてください。
[AppOpenAdManager]は作成するだけでOKです。

またアプリ用IDを、[Assets] -> [Google Mobile Ads] -> [Settings]に記載します。(詳しくは、前述のAdmobスタートアップのリンク先の「AdMob アプリ ID を設定する」を参照)

◆参考:テスト用のアプリID

ca-app-pub-3940256099942544~3347511713

◆[GoogleMobileAdsDemoScript]スクリプト

using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        // Load an app open ad when the scene starts
        AppOpenAdManager.Instance.LoadAd();

        // Listen to application foreground and background events.
        AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
    }

    private void OnAppStateChanged(AppState state)
    {
        // Display the app open ad when the app is foregrounded.
        UnityEngine.Debug.Log("App State is " + state);
        if (state == AppState.Foreground)
        {
            AppOpenAdManager.Instance.ShowAdIfAvailable();
        }
    }
}

◆[AppOpenAdManager]スクリプト

using System;
using GoogleMobileAds.Api;
using UnityEngine;

public class AppOpenAdManager
{
    //テスト広告ID
    private const string AD_UNIT_ID = "ca-app-pub-3940256099942544/3419835294";

    private static AppOpenAdManager instance;

    private AppOpenAd ad;

    private bool isShowingAd = false;

    public static AppOpenAdManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new AppOpenAdManager();
            }

            return instance;
        }
    }

    private bool IsAdAvailable
    {
        get
        {
            return ad != null;
        }
    }

    public void LoadAd()
    {
        AdRequest request = new AdRequest.Builder().Build();

        // Load an app open ad for portrait orientation
        AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
        {
            if (error != null)
            {
                // Handle the error.
                Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
                return;
            }

            // App open ad is loaded.
            ad = appOpenAd;
        }));
    }

    public void ShowAdIfAvailable()
    {
        if (!IsAdAvailable || isShowingAd)
        {
            return;
        }

        ad.OnAdDidDismissFullScreenContent += HandleAdDidDismissFullScreenContent;
        ad.OnAdFailedToPresentFullScreenContent += HandleAdFailedToPresentFullScreenContent;
        ad.OnAdDidPresentFullScreenContent += HandleAdDidPresentFullScreenContent;
        ad.OnAdDidRecordImpression += HandleAdDidRecordImpression;
        ad.OnPaidEvent += HandlePaidEvent;

        ad.Show();
    }

    private void HandleAdDidDismissFullScreenContent(object sender, EventArgs args)
    {
        Debug.Log("Closed app open ad");
        // Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad = null;
        isShowingAd = false;
        LoadAd();
    }

    private void HandleAdFailedToPresentFullScreenContent(object sender, AdErrorEventArgs args)
    {
        Debug.LogFormat("Failed to present the ad (reason: {0})", args.AdError.GetMessage());
        // Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad = null;
        LoadAd();
    }

    private void HandleAdDidPresentFullScreenContent(object sender, EventArgs args)
    {
        Debug.Log("Displayed app open ad");
        isShowingAd = true;
    }

    private void HandleAdDidRecordImpression(object sender, EventArgs args)
    {
        Debug.Log("Recorded ad impression");
    }

    private void HandlePaidEvent(object sender, AdValueEventArgs args)
    {
        Debug.LogFormat("Received paid event. (currency: {0}, value: {1}",
                args.AdValue.CurrencyCode, args.AdValue.Value);
    }
}

本手順により、スマホでアプリを初回起動したときには広告は表示されませんが、アプリを落とさずに再度起動したときにアプリ起動時広告が表示されるようになります。

最後に

いかがでしたでしょうか。
公式HPを見ると難しく見えますが、手順は意外とシンプルでした。
アプリ起動時広告は毎回表示されると嫌がられるため、表示頻度を落としたりすると良いと公式HPに記載がありました。

ランダム関数で頻度を調整するなど試してみて下さい!

以上、だらはでした。

スポンサーリンク

基礎

Posted by daraha_gm