Rewarded Ads

リワード広告は、ユーザーが広告を操作することと引き換えに、アプリ内で報酬を獲得できる広告です。このガイドでは、Ad Manager のリワード広告を iOS アプリに組み込む方法について説明します。

前提条件

  • Google Mobile Ads SDK 7.42.2 以降

    リワード広告のオブジェクトを作成する

    リワード広告は、GADRewardedAd オブジェクトによってリクエストされ、表示されます。このオブジェクトを使用するには、まずオブジェクトをインスタンス化し、広告ユニット ID を設定する必要があります。たとえば、UIViewControllerviewDidLoad: メソッドを使って次のように GADRewardedAd を作成できます。

    Swift

    import GoogleMobileAds
    import UIKit
    
    class ViewController: UIViewController, GADRewardedAdDelegate {
      /// The rewarded video ad.
      var rewardedAd: GADRewardedAd? override func viewDidLoad() {
        super.viewDidLoad()
        rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
      }
    }
    

    Objective-C

    @import GoogleMobileAds;
    @import UIKit;
    
    @interface ViewController ()
    
    @property(nonatomic, strong) GADRewardedAd *rewardedAd;
    
    @end
    
    @implementation ViewController
    - (void)viewDidLoad {
      [super viewDidLoad];
    
      self.rewardedAd = [[GADRewardedAd alloc]
          initWithAdUnitID:@"/6499/example/rewarded-video"];
    }
    

    常にテスト広告でテストする

    アプリの開発とテストでは実際の広告ではなく、必ずテスト広告を使ってください。実際の広告でテストすると、アカウントが停止される場合があります。

    テスト広告は、次に示す iOS リワード広告向けのテスト専用広告ユニット ID を使うと簡単に読み込むことができます。

    /6499/example/rewarded-video

    この ID は、すべてのリクエストに対してテスト広告を返す特別な ID で、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、テスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。

    Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告でご確認いただけます。

    広告を読み込む

    リワード広告を読み込むには、GADRewardedAd オブジェクトの loadRequest:completionHandler: を呼び出します。

    Swift

    rewardedAd?.load(GADRequest()) { error in
      self.adRequestInProgress = false
      if let error = error {
        print("Loading failed: \(error)")
      } else {
        print("Loading Succeeded")
      }
    }
    

    Objective-C

    @import GoogleMobileAds;
    @import UIKit;
    
    @interface ViewController ()
    
    @property(nonatomic, strong) GADRewardedAd *rewardedAd;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
      [super viewDidLoad];
    
      self.rewardedAd = [[GADRewardedAd alloc]
          initWithAdUnitID:@"/6499/example/rewarded-video"];
    
      DFPRequest *request = [DFPRequest request];
      [self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
        if (error) {
          // Handle ad failed to load case.
        } else {
          // Ad successfully loaded.
        }
      }];
    }
    

    このコードは、DFPRequest と完了ブロックが指定されているリワード広告を読み込みます。広告リクエストが正常に完了すると、GADRequestError パラメータは nil になり、完了ブロックが実行されます。広告の読み込みが失敗すると、エラー情報を提供する非 nil エラー オブジェクトが生成されます。

    広告を表示する

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

    リワード広告を表示するには、広告の読み込みが完了したことを GADRewardedAdisReady プロパティで確認してから、presentFromRootViewController:delegate: を呼び出します。次のコードは、UIViewController のアクション メソッドのひとつでこの手順を行う方法を示しています。

    Swift

    @IBAction func doSomething(sender: UIButton) {
      if rewardedAd?.isReady == true {
         rewardedAd?.present(fromRootViewController: self, delegate:self)
      }
    }
    

    Objective-C

    @import GoogleMobileAds;
    
    @import UIKit;
    
    @interface ViewController () <GADRewardedAdDelegate>
    
    @property(nonatomic, strong) GADRewardedAd *rewardedAd;
    
    @end
    
    @implementation ViewController
    - (IBAction)doSomething:(id)sender {
      ...
      if (self.rewardedAd.isReady) {
        [self.rewardedAd presentFromRootViewController:self delegate:self];
      } else {
        NSLog(@"Ad wasn't ready");
      }
    }
    

    広告イベント通知を受信する

    presentFromRootViewController:delegate: メソッドで指定された GADRewardedAdDelegate は、リワード広告のイベントが発生すると呼び出されます。GADRewardedAdDelegate の各メソッドは、それぞれリワード広告のライフサイクルで生じるイベントに対応しています。rewardedAd:userDidEarnReward: メソッドは必ず実装する必要があります。クラスの他のメソッドはすべてオプションであるため、必要なメソッドだけを実装できます。以下のサンプルでは、各メソッドを実装して、コンソールにログとしてメッセージを出力しています。

    Swift

    /// Tells the delegate that the user earned a reward.
    func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
      print("Reward received with currency: \(reward.type), amount \(reward.amount).")
    }
    /// Tells the delegate that the rewarded ad was presented.
    func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
      print("Rewarded ad presented.")
    }
    /// Tells the delegate that the rewarded ad was dismissed.
    func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
      print("Rewarded ad dismissed.")
    }
    /// Tells the delegate that the rewarded ad failed to present.
    func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {
      print("Rewarded ad failed to present.")
    }
    

    Objective-C

    /// Tells the delegate that the user earned a reward.
    - (void)rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward {
      // TODO: Reward the user.
      NSLog(@"rewardedAd:userDidEarnReward:");
    }
    
    /// Tells the delegate that the rewarded ad was presented.
    - (void)rewardedAdDidPresent:(GADRewardedAd *)rewardedAd {
      NSLog(@"rewardedAdDidPresent:");
    }
    
    /// Tells the delegate that the rewarded ad failed to present.
    - (void)rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error {
      NSLog(@"rewardedAd:didFailToPresentWithError");
    }
    
    /// Tells the delegate that the rewarded ad was dismissed.
    - (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
      NSLog(@"rewardedAdDidDismiss:");
    }
    

    GADRewardedAdDelegate を使用して次のリワード広告をプリロードする

    GADRewardedAd は使い捨てオブジェクトです。つまり、リワード広告を一度表示すると、このオブジェクトを使って他の広告を読み込むことはできません。他のリワード広告をリクエストするには、新しい GADRewardedAd オブジェクトを作成します。

    おすすめの方法は、GADRewardedAdDelegaterewardedAdDidDismiss: メソッドで別のリワード広告を読み込んでおき、前のリワード広告の表示が終了したらすぐに次のリワード広告の読み込みを開始できるようにすることです。

    Swift

    override func viewDidLoad() {
      super.viewDidLoad()
      rewardedAd = createAndLoadRewardedAd()
    }
    
    func createAndLoadRewardedAd() {
      rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
      rewardedAd?.load(GADRequest()) { error in
        if let error = error {
          print("Loading failed: \(error)")
        } else {
          print("Loading Succeeded")
        }
      }
      return rewardedAd
    }
    
    func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
      rewardedAd = createAndLoadRewardedAd()
    }
    

    Objective-C

    - (void)viewDidLoad {
      [super viewDidLoad];
      self.rewardedAd = [self createAndLoadRewardedAd];
    }
    
    - (GADRewardedAd *)createAndLoadRewardedAd {
      GADRewardedAd *rewardedAd = [[GADRewardedAd alloc]
          initWithAdUnitID:@"/6499/example/rewarded-video"];
      DFPRequest *request = [DFPRequest request];
      [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
        if (error) {
          // Handle ad failed to load case.
        } else {
          // Ad successfully loaded.
        }
      }];
      return rewardedAd;
    }
    
    - (void)rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd {
      self.rewardedAd = [self createAndLoadRewardedAd];
    }
    

    複数のリワード広告を読み込む

    複数のリワード広告を読み込むには、広告ごとにリワード広告のオブジェクトを作成するおよび広告を読み込むで説明されている手順を行います。次のコード スニペットは、2 つの異なる広告プレースメントに 2 つのリワード広告を読み込む方法を示しています。

    Swift

    override func viewDidLoad() {
      super.viewDidLoad()
      rewardedAd1 = createAndLoadRewardedAd("first-ad-unit-id")
      rewardedAd2 = createAndLoadRewardedAd("second-ad-unit-id")
    }
    
    func createAndLoadRewardedAd(adUnitId) {
      rewardedAd = GADRewardedAd(adUnitID: adUnitId)
      rewardedAd?.load(GADRequest()) { error in
        if let error = error {
          print("Loading failed: \(error)")
        } else {
          print("Loading Succeeded")
        }
      }
      return rewardedAd
    }
    

    Objective-C

    - (void)viewDidLoad {
      [super viewDidLoad];
      GADRewardedAd *gameOverRewardedAd = [self
        createAndLoadRewardedAdForAdUnit:@"/6499/example/rewarded-video"];
      GADRewardedAd *extraCoinsRewardedAd = [self
        createAndLoadRewardedAdForAdUnit:@"/6499/example/rewarded-video"];
    }
    
    - (GADRewardedAd *)createAndLoadRewardedAdForAdUnit:(NSString *) adUnitId {
      GADRewardedAd *rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitId];
      DFPRequest *request = [DFPRequest request];
      [rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
        if (error) {
          // Handle ad failed to load case.
        } else {
          // Ad successfully loaded.
        }
      }];
      return rewardedAd;
    }