動画リワード広告

動画リワード広告では、ユーザーは、フルスクリーンの広告動画を最後まで視聴することと引き換えにアプリ内報酬を獲得できます。

このガイドでは、AdMob の動画リワード広告を Unity アプリに統合する方法について説明します。

前提条件

スタートガイドの手順を完了し、Unity アプリに Google Mobile Ads Unity プラグインがインポート済みになっていること

Singleton インスタンスへの参照を取得する

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

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

    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

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

    }
}

広告を読み込む

RewardedBasedVideoAd は Singleton なので、広告の読み込みリクエストは共有インスタンスに対して行う必要があります。

以下に示すように、可能な限り早期に(たとえば、GameObject に添付されたスクリプトの Start() メソッドで)LoadAd() を呼び出して、動画をプリロードできるようにすることを強くおすすめします。

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

    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        // 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 を使って自由に広告をリクエストできます。これは個々のリクエストに対して実際の広告ではなくテスト広告を返すよう特別に設定されており、安全に使用できます。

ただし、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 ユーザーが別のアプリ(Google Play など)を起動して、現在のアプリをバックグラウンドで実行すると、このメソッドが OnAdOpened の後に呼び出さます。

広告を表示する

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

動画リワード広告を表示するには、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();
}

その他のリソース

サンプル

次のステップ

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。