前提条件
カスタム イベントの設定を完了します。
インタースティシャル広告をリクエストする
ウォーターフォール メディエーション チェーンでカスタム イベント広告申込情報に到達すると、
loadInterstitial:adConfiguration:completionHandler:
メソッドが呼び出される
カスタム ディメンションの作成時に指定したクラス名
イベントをご覧ください。この場合、メソッドは SampleCustomEvent
にあり、SampleCustomEventInterstitial
で loadInterstitial:adConfiguration:completionHandler:
メソッドを呼び出します。
インタースティシャル広告をリクエストするには、次を実装するクラスを作成または変更します:
GADMediationAdapter
と loadInterstitial:adConfiguration:completionHandler:
。
GADMediationAdapter
を拡張するクラスがすでに存在する場合は、実装します。
loadInterstitial:adConfiguration:completionHandler:
。また
GADMediationInterstitialAd
を実装するための新しいクラスを作成します。
この例では、SampleCustomEvent
が GADMediationAdapter
インターフェースを実装し、その後 SampleCustomEventInterstitial
にデリゲートします。
Swift
import GoogleMobileAds class SampleCustomEvent: NSObject, GADMediationAdapter { fileprivate var interstitialAd: SampleCustomEventInterstitial? ... func loadInterstitial( for adConfiguration: GADMediationInterstitialAdConfiguration, completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler ) { self.interstitialAd = SampleCustomEventInterstitial() self.interstitialAd?.loadInterstitial( for: adConfiguration, completionHandler: completionHandler) } }
Objective-C
#import "SampleCustomEvent.h" @implementation SampleCustomEvent SampleCustomEventInterstitial *sampleInterstitial; - (void)loadInterstitialForAdConfiguration: (GADMediationInterstitialAdConfiguration *)adConfiguration completionHandler: (GADMediationInterstitialLoadCompletionHandler) completionHandler { sampleInterstitial = [[SampleCustomEventInterstitial alloc] init]; [sampleInterstitial loadInterstitialForAdConfiguration:adConfiguration completionHandler:completionHandler]; }
SampleCustomEventInterstitial
は次のタスクを行います。
インタースティシャル広告の読み込みと
GADMediationInterstitialAdLoadCompletionHandler
メソッドを呼び出します。GADMediationInterstitialAd
プロトコルの実装広告イベント コールバックを受信して Google Mobile Ads SDK に報告する。
UI で定義される省略可能なパラメータは
広告設定に含まれています
このパラメータには、
adConfiguration.credentials.settings[@"parameter"]
。このパラメータは、
通常は広告ユニット識別子です
広告オブジェクトをインスタンス化します
Swift
import GoogleMobileAds class SampleCustomEventInterstitial: NSObject, GADMediationInterstitialAd { /// The Sample Ad Network interstitial ad. var interstitial: SampleInterstitial? /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. var delegate: GADMediationInterstitialAdEventDelegate? var completionHandler: GADMediationInterstitialLoadCompletionHandler? func loadInterstitial( for adConfiguration: GADMediationInterstitialAdConfiguration, completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler ) { interstitial = SampleInterstitial.init( adUnitID: adConfiguration.credentials.settings["parameter"] as? String) interstitial?.delegate = self let adRequest = SampleAdRequest() adRequest.testMode = adConfiguration.isTestRequest self.completionHandler = completionHandler interstitial?.fetchAd(adRequest) } func present(from viewController: UIViewController) { if let interstitial = interstitial, interstitial.isInterstitialLoaded { interstitial.show() } } }
Objective-C
#import "SampleCustomEventInterstitial.h" @interface SampleCustomEventInterstitial () <SampleInterstitialAdDelegate, GADMediationInterstitialAd> { /// The sample interstitial ad. SampleInterstitial *_interstitialAd; /// The completion handler to call when the ad loading succeeds or fails. GADMediationInterstitialLoadCompletionHandler _loadCompletionHandler; /// The ad event delegate to forward ad rendering events to the Google Mobile /// Ads SDK. id <GADMediationInterstitialAdEventDelegate> _adEventDelegate; } @end - (void)loadInterstitialForAdConfiguration: (GADMediationInterstitialAdConfiguration *)adConfiguration completionHandler: (GADMediationInterstitialLoadCompletionHandler) completionHandler { __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT; __block GADMediationInterstitialLoadCompletionHandler originalCompletionHandler = [completionHandler copy]; _loadCompletionHandler = ^id<GADMediationInterstitialAdEventDelegate>( _Nullable id<GADMediationInterstitialAd> ad, NSError *_Nullable error) { // Only allow completion handler to be called once. if (atomic_flag_test_and_set(&completionHandlerCalled)) { return nil; } id<GADMediationInterstitialAdEventDelegate> delegate = nil; if (originalCompletionHandler) { // Call original handler and hold on to its return value. delegate = originalCompletionHandler(ad, error); } // Release reference to handler. Objects retained by the handler will also // be released. originalCompletionHandler = nil; return delegate; }; NSString *adUnit = adConfiguration.credentials.settings[@"parameter"]; _interstitialAd = [[SampleInterstitial alloc] initWithAdUnitID:adUnit]; _interstitialAd.delegate = self; SampleAdRequest *adRequest = [[SampleAdRequest alloc] init]; adRequest.testMode = adConfiguration.isTestRequest; [_interstitialAd fetchAd:adRequest]; }
広告が正常に取得された場合も、エラーが発生した場合も、
GADMediationInterstitialLoadCompletionHandler
を呼び出します。成功した場合は、GADMediationInterstitialAd
を実装するクラスを、エラー パラメータに nil
値を指定して渡します。失敗した場合は、発生したエラーを渡します。
通常、これらのメソッドは
実装する必要があります。この例では、サンプル SDK が
関連するコールバックを含む SampleInterstitialAdDelegate
がある。
Swift
func interstitialDidLoad(_ interstitial: SampleInterstitial) { if let handler = completionHandler { delegate = handler(self, nil) } } func interstitial( _ interstitial: SampleInterstitial, didFailToLoadAdWith errorCode: SampleErrorCode ) { let error = SampleCustomEventUtilsSwift.SampleCustomEventErrorWithCodeAndDescription( code: SampleCustomEventErrorCodeSwift .SampleCustomEventErrorAdLoadFailureCallback, description: "Sample SDK returned an ad load failure callback with error code: \(errorCode)" ) if let handler = completionHandler { delegate = handler(nil, error) } }
Objective-C
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial { _adEventDelegate = _loadCompletionHandler(self, nil); } - (void)interstitial:(SampleInterstitial *)interstitial didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode { NSError *error = SampleCustomEventErrorWithCodeAndDescription( SampleCustomEventErrorAdLoadFailureCallback, [NSString stringWithFormat:@"Sample SDK returned an ad load failure " @"callback with error code: %@", errorCode]); _adEventDelegate = _loadCompletionHandler(nil, error); }
GADMediationInterstitialAd
では、表示する present
メソッドを実装する必要があります。
次を行います。
Swift
func present(from viewController: UIViewController) { if let interstitial = interstitial, interstitial.isInterstitialLoaded { interstitial.show() } }
Objective-C
- (void)presentFromViewController:(UIViewController *)viewController { if ([_interstitialAd isInterstitialLoaded]) { [_interstitialAd show]; } else { NSError *error = SampleCustomEventErrorWithCodeAndDescription( SampleCustomEventErrorAdNotLoaded, [NSString stringWithFormat:@"The interstitial ad failed to present " @"because the ad was not loaded."]); [_adEventDelegate didFailToPresentWithError:error] } }
メディエーション イベントを Google Mobile Ads SDK に転送する
読み込まれた GADMediationInterstitialLoadCompletionHandler
を呼び出して
返された GADMediationInterstitialAdEventDelegate
デリゲート オブジェクトは、
その後、プレゼンテーション イベントをサードパーティから転送するためにアダプタが使用します。
Google Mobile Ads SDK にリンクします。SampleCustomEventInterstitial
クラス
SampleInterstitialAdDelegate
プロトコルを実装して、
Google Mobile Ads SDK に送信します。
カスタム イベントは、できるだけ多くのコールバックを これにより、アプリはこれらの同等のイベントを Google Mobile Ads SDK があります。コールバックの使用例を次に示します。
Swift
func interstitialWillPresentScreen(_ interstitial: SampleInterstitial) { delegate?.willPresentFullScreenView() delegate?.reportImpression() } func interstitialWillDismissScreen(_ interstitial: SampleInterstitial) { delegate?.willDismissFullScreenView() } func interstitialDidDismissScreen(_ interstitial: SampleInterstitial) { delegate?.didDismissFullScreenView() } func interstitialWillLeaveApplication(_ interstitial: SampleInterstitial) { delegate?.reportClick() }
Objective-C
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial { [_adEventDelegate willPresentFullScreenView]; [_adEventDelegate reportImpression]; } - (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial { [_adEventDelegate willDismissFullScreenView]; } - (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial { [_adEventDelegate didDismissFullScreenView]; } - (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial { [_adEventDelegate reportClick]; }
これで、インタースティシャル広告のカスタム イベントの実装が完了しました。サンプル全体は GitHub で入手できます。すでにサポートされている広告ネットワークで使用するか、 カスタム イベントのインタースティシャル広告を表示します。