リワード広告のカスタム イベント(ベータ版)

このガイドは、AdMob 管理画面で直接サポートされていないネットワークのリワード広告を、AdMob メディエーションを使用して表示することに関心をお持ちのパブリッシャー様を対象としています。

リワード広告のカスタム イベントを使用すると、カスタム メディエーション アダプタを記述して、第三者広告ネットワークのリワード広告を表示することができます。このガイドでは、Google が開発したサンプル SDK を使用して、広告をリクエストするカスタム イベントを記述する方法について説明します。サンプル SDK の完全なソースは、GitHub で入手できます。

前提条件

カスタム イベントを組み込むには、事前にリワード広告フォーマットを組み込んでおく必要があります。リワード広告フォーマットを組み込む手順については、リワード広告(ベータ版)をご覧ください。

カスタム イベントの作成

カスタム イベントを定義するには、まず AdMob の管理画面でカスタム イベントを作成する必要があります。カスタム イベントの作成手順については、カスタム イベントの追加をご覧ください。 カスタム イベントのクラス名は、Adapter インターフェースを実装してリワード広告を配信するアプリ内のクラスを定義します。AdMob 管理画面で定義されているカスタム イベントの parameter は、広告の読み込み時にアダプタに渡されます。

カスタム イベントの実装

カスタム イベントとは、第三者の広告を配信するために GADMediationAdapter プロトコルを実装するクラスです。以下の手順では、カスタム イベントを実装して、サンプル広告ネットワークのリワード広告をリクエストし、表示する方法を示します。

GADMediationAdapter の実装

カスタム イベントを作成するための最初のステップは、GADMediationAdapter プロトコルの実装です。このプロトコルの実装には、次の GADMediationAdapterSampleAdNetwork クラスを使用します。

#import <Foundation/Foundation.h>

@import GoogleMobileAds;
@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

エクストラ クラスの通知

カスタム イベントで、広告リクエストの追加パラメータを指定するエクストラ クラスがサポートされている場合は、networkExtrasClass メソッドから extras クラスを返します。パブリッシャーが指定するエクストラ クラスがサポートされていない場合は、Nil を返します。

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (nullable Class<GADAdNetworkExtras>)networkExtrasClass {
  return Nil;
}
...
@end

バージョン番号の通知

すべてのカスタム イベントは、カスタム イベント自身のバージョンとカスタム イベントがアクセスする第三者 SDK のバージョンを Google Mobile Ads SDK に通知する必要があります。バージョンは GADVersionNumber として通知されます。

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
  NSString *versionString = @"1.0.0";
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
  GADVersionNumber version = {0};
  if (versionComponents.count == 3) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    version.patchVersion = [versionComponents[2] integerValue];
  }
  return version;
}

+ (GADVersionNumber)version {
  NSString *versionString = @"1.0.0.0";
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
  GADVersionNumber version = {0};
  if (versionComponents.count == 4) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];

    // Adapter versions have 2 patch versions. Multiply the first patch by 100.
    version.patchVersion = [versionComponents[2] integerValue] * 100
      + [versionComponents[3] integerValue];
  }
  return version;
}
...
@end

アダプタの初期化

アプリで Google Mobile Ads SDK を初期化すると、AdMob 管理画面で設定されているアプリのすべてのアダプタおよびカスタム イベントで setUpWithConfiguration:completionHandler: が呼び出されます。カスタム イベントは、このメソッド内で必要な初期化を実行するか、第三者広告 SDK を設定する必要があります。

GADMediationServerConfiguration 引数は、AdMob 管理画面で設定されているアプリのすべてのプレースメントに関する情報を提供します。

setUpWithConfiguration:completionHandler: の呼び出し時に渡される引数 GADMediationAdapterSetUpCompletionBlock を呼び出して、初期化の成功または失敗を Google Mobile Ads SDK に通知します。初期化が成功した場合は、nil を指定して完了ハンドラを呼び出します。初期化が失敗した場合は、完了ハンドラに NSError オブジェクトを渡します。

次のコード スニペットは、サンプル広告 SDK を初期化して、広告リクエストに対応できる状態にする方法を示しています。

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork

+ (void)setUpWithConfiguration:(GADMediationServerConfiguration *)configuration
             completionHandler:(GADMediationAdapterSetUpCompletionBlock)completionHandler {
  NSMutableArray<NSString *> *adUnitIDs = [[NSMutableArray alloc] init];
  for (GADMediationCredentials *credential in configuration.credentials) {
    if (credential.format == GADAdFormatRewarded) {
      [adUnitIDs addObject:credential.settings[@"adUnitID"]];
    }
  }
  if ([adUnitIDs count] == 0) {
    NSError *error =
        [NSError errorWithDomain:@"GADMediationAdapterSampleAdNetwork"
                            code:0
                        userInfo:@{NSLocalizedDescriptionKey : @"No adUnitIDs specified."}];
    completionHandler(error);
    return;
  }
  [SampleAdNetwork initWithCompletionHandler:^(NSError *error) {
    if (error) {
      completionHandler(error);
      return;
    }
    completionHandler(nil);
  }];
}
@end

リワード広告のリクエスト

アプリがリワード広告の読み込みをリクエストすると、カスタム イベントの loadRewardedAdForAdConfiguration:completionHandler: メソッドが呼び出されます。

広告の読み込みが成功したら、GADMediationRewardedAd を実装するオブジェクトへの参照を渡して、指定された completionHandler を呼び出し、読み込みの成功を Google Mobile Ads SDK に通知します。この呼び出しで、GADMediationRewardedAdEventDelegate が返されます。カスタム イベントは、このオブジェクトへの参照を保持して、広告のライフサイクルで発生するイベントを Google Mobile Ads SDK に通知する必要があります。イベントの通知については、広告の表示セクションで詳しく説明します。

広告の読み込みエラーを通知するには、NSError オブジェクトを渡して、指定された completionHandler を呼び出します。

loadRewardedAdForAdConfiguration:completionHandler: の実装例を次に示します。

#import "GADMediationAdapterSampleAdNetwork.h"

@interface GADMediationAdapterSampleAdNetwork () <GADMediationRewardedAd> {
  /// Reward-based video ads from Sample SDK.
  SampleRewardBasedVideo *_rewardBasedVideoAd;
}
@property(nonatomic, weak, nullable) id<GADMediationRewardedAdEventDelegate> delegate;
@end
@implementation GADMediationAdapterSampleAdNetwork
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:(GADRewardedLoadCompletionHandler)completionHandler {
  NSString *adUnit = adConfiguration.credentials.settings[@"ad_unit"];
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  [SampleAdNetwork loadAdWithRequest:request
                   completionHandler:^(SampleRewardBasedVideo *ad ,NSError *error) {
    if (error) {
      completionHandler(nil, error);
      return;
    }
    _rewardBasedVideoAd = ad;
    self.delegate = completionHandler(self, nil);
  }];
}
...
@end

広告の表示

アプリが Google Mobile Ads SDK にリワード広告の表示をリクエストすると、SDK は GADMediationRewardedAd のインスタンスに対して presentFromViewController: メソッドを呼び出します。リワード広告を表示するには、下記のメソッドを実装します。

- (void)presentFromViewController:(nonnull UIViewController *)viewController {
  if ([_rewardBasedVideoAd checkAdAvailability]) {
    // The reward based video ad is available, present the ad.
    [_rewardBasedVideoAd presentFromRootViewController:viewController];
  } else {
    NSError *error =
      [NSError errorWithDomain:@"GADMediationAdapterSampleAdNetwork"
                          code:0
                      userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
    [self.delegate didFailToPresentWithError:error];
  }
}

広告イベントの通知

広告を表示した後、カスタム イベントでは広告の読み込みの成功時に渡された GADMediationRewardedAdEventDelegate を使用して、必要に応じて広告ライフサイクルのイベントを Google Mobile Ads SDK に通知します。

- (void)rewardBasedVideoAdDidOpen:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delgate willPresentFullScreenView];
  [self.delgate reportImpression];
}

- (void)rewardBasedVideoAdDidStartPlaying:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delgate didStartVideo];
}

- (void)rewardBasedVideoAdDidStopPlaying:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delgate didEndVideo];
}

- (void)rewardBasedVideoAdDidClose:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delgate willDismissFullScreenView];
}

- (void)rewardBasedVideoAdDidReceiveAdClick:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delgate reportClick];
}

- (void)rewardBasedVideoAd:(SampleRewardBasedVideo *)rewardBasedVideo
      rewardUserWithReward:(int)reward {
  [[GADAdReward alloc] initWithRewardType:@"SampleAdReward"
                             rewardAmount:[NSDecimalNumber decimalNumberWithString:@"1"]];
  [strongDelegate didRewardUserWithReward:reward];
}

Google Mobile Ads SDK には、以下の広告イベントを通知します。

広告イベント 説明
willPresentFullScreenView 広告が表示されることを Google Mobile Ads SDK に通知します。
didStartVideo リワード広告の再生が開始されたことを Google Mobile Ads SDK に通知します。
reportImpression 広告でインプレッションが発生したことを Google Mobile Ads SDK に通知します。
didEndVideo リワード広告の再生が終了したことを Google Mobile Ads SDK に通知します。
didRewardUserWithReward ユーザーが報酬を獲得したことを Google Mobile Ads SDK に通知します。
reportClick 広告がクリックされたことを Google Mobile Ads SDK に通知します。
willDismissFullScreenView 広告が閉じられることを Google Mobile Ads SDK に通知します。

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

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