動画リワード広告(以前の API)

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

動画リワード広告は全画面表示の動画広告で、アプリ内報酬と引き換えに最後まで視聴するかどうかユーザーが選択できます。

このガイドでは、AdMob の動画リワード広告を Unity アプリに組み込む方法を説明します。

前提条件

スタートガイドの手順を完了し、Unity アプリに Google Mobile Ads Unity プラグインをインポートしておきます。

シングルトン インスタンスへの参照を取得する

動画リワード広告を表示するための最初のステップは、シングルトンの RewardBasedVideoAd インスタンスへの参照を取得することです。この参照は、RewardBasedVideoAd.Instance を呼び出すことで取得できます。

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(initStatus => { });

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    }
}

広告を読み込む

RewardedBasedVideoAd はシングルトンなので、広告の読み込みリクエストは共有インスタンスを使って行う必要があります。

LoadAd() は、次に示すようにできるだけ早く呼び出して、動画のプリロードを可能にすることを強くおすすめします(たとえば、GameObject に追加するスクリプトの Start() メソッドで呼び出します)。

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(initStatus => { });

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded video ad with the request.
        this.rewardBasedVideo.LoadAd(request, adUnitId);
    }
}

必ずテスト広告でテストする

上のサンプルコードには広告ユニット ID が含まれ、これを使って自由に広告をリクエストできます。この ID は、どのリクエストに対しても実際の広告ではなくテスト広告を返すように設定されており、安全に使用できます。

ただし、AdMob 管理画面でアプリを登録し、アプリで使用する独自の広告ユニット ID を作成した場合は、開発時にデバイスをテストデバイスとして明示的に設定する必要があります。これは非常に重要です。実際の広告を使ったテストは(広告をタップしなくても)AdMob ポリシー違反とみなされ、アカウントの停止につながる可能性があります。開発時に必ずテスト広告を取得する方法については、テスト広告をご覧ください。

広告イベント

広告の動作をより細かくカスタマイズするには、広告のライフサイクルで生じるさまざまなイベント(読み込み、開始、終了など)を利用します。適切な EventHandler にデリゲートを登録して、これらのイベントをリッスンします。最も重要なイベントは OnAdRewarded で、ユーザーが動画の視聴と引き換えに報酬を受け取るときに呼び出されます。以下に示すように、他の広告イベントを実装することもできます。

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded video ad with the request.
        this.rewardBasedVideo.LoadAd(request, adUnitId);
    }

    public void HandleRewardBasedVideoLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardBasedVideoLoaded event received");
    }

    public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardBasedVideoFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardBasedVideoOpened(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardBasedVideoOpened event received");
    }

    public void HandleRewardBasedVideoStarted(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardBasedVideoStarted event received");
    }

    public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardBasedVideoClosed event received");
    }

    public void HandleRewardBasedVideoRewarded(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardBasedVideoRewarded event received for "
                        + amount.ToString() + " " + type);
    }

    public void HandleRewardBasedVideoLeftApplication(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardBasedVideoLeftApplication event received");
    }
}

OnAdRewarded イベントには特別なイベント引数が含まれます。このイベントが渡す Reward のインスタンスには、ユーザーに提供される報酬について説明する TypeAmount が含まれます。

public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    print("User rewarded with: " + amount.ToString() + " " + type);
}

OnAdFailedToLoad イベントにも、特別なイベント引数が含まれます。このイベントが渡す HandleAdFailedToLoadEventArgs のインスタンスには、次のようにエラーを説明する Message が含まれます。

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
  print("Rewarded video ad failed to load: " + args.Message);
  // Handle the ad failed to load event.
}
広告イベント説明
OnAdLoaded OnAdLoaded イベントは、広告の読み込みが完了すると呼び出されます。
OnAdFailedToLoad OnAdFailedToLoad イベントは、広告の読み込みに失敗すると呼び出されます。Message パラメータは、発生したエラーの種類を表します。
OnAdOpening このメソッドは、広告がデバイスの画面いっぱいに表示されたときに呼び出されます。分析パッケージを使用してクリックスルーを測定している場合は、ここで記録するのがおすすめです。
OnAdStarted このメソッドは、広告の再生が始まると呼び出されます。
OnAdRewarded このメソッドは、動画を視聴したユーザーに報酬を付与すべきときに呼び出されます。Reward パラメータは、そのユーザーに付与される報酬を表します。
OnAdClosed このメソッドは、ユーザーが [閉じる] アイコンか [戻る] ボタンをタップして動画リワード広告を閉じると呼び出されます。アプリで音声出力やゲームループを一時停止している場合は、ここで一時停止を解除するのがおすすめです。
OnAdLeavingApplication このメソッドは OnAdOpened の後に、ユーザーが別のアプリ(Google Play ストアなど)を開いて、現在のアプリがバックグラウンドに移動すると呼び出されます。

広告を表示する

リワード広告をユーザーに表示する前に、リワード広告のコンテンツを報酬と引き換えに視聴するかどうか、明確な選択肢を示す必要があります。リワード広告は、必ずユーザーの許可を受けてから表示しなければなりません。

動画リワード広告を表示するには、IsLoaded() メソッドを使用して読み込みが完了したことを確認してから、Show() を呼び出します。

次のコード スニペットは、動画リワード広告の表示方法を示しています。

private void UserOptToWatchAd()
{
  if (rewardBasedVideo.IsLoaded()) {
    rewardBasedVideo.Show();
  }
}

広告を再読み込みする

ある動画リワード広告を表示した後に、別の新しい動画リワード広告を読み込むには、OnAdClosed イベントを使うと便利です。

public void Start()
{
    this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
}

public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
    this.RequestRewardBasedVideo();
}

その他のリソース

サンプル

次のステップ