보상형 광고 맞춤 이벤트

이 가이드는 AdMob 미디에이션을 사용하여 UI에서 직접 지원되지 않는 네트워크의 보상형 광고를 표시하려는 게시자를 대상으로 작성되었습니다.

보상형 광고 맞춤 이벤트를 사용하면 맞춤 미디에이션 어댑터를 작성해 타사 광고 네트워크의 보상형 광고를 표시할 수 있습니다. 이 가이드에서는 Google에서 개발한 샘플 SDK에서 광고를 요청하기 위해 맞춤 이벤트를 작성하는 방법을 설명합니다. 샘플 SDK의 전체 소스는 GitHub를 참조하세요.

기본 요건

맞춤 이벤트를 통합하려면 먼저 보상형 광고 형식을 통합해야 합니다. 보상형 광고 형식을 통합하는 방법은 보상형 광고 가이드를 참고하세요.

맞춤 이벤트 생성하기

맞춤 이벤트를 정의하려면 먼저 AdMob UI에서 맞춤 이벤트를 만들어야 합니다. 맞춤 이벤트 추가에서 맞춤 이벤트 만들기 방법을 확인하세요.

정의 단계가 완료된 맞춤 이벤트 어댑터는 앱에서 보상형 동영상을 제공하기 위해 GADMediationAdapter 프로토콜을 구현하는 클래스를 가리킵니다. 또한 맞춤 이벤트는 보상형 어댑터로 전달되는 서버 매개변수를 나열합니다.

다음은 샘플 맞춤 이벤트 설정을 보여주는 스크린샷입니다.

스크린샷에 포함된 항목은 다음과 같습니다.

클래스 이름
맞춤 이벤트 어댑터를 구현하는 클래스의 정규화된 이름입니다.
라벨
광고 소스를 정의하는 고유한 이름입니다.
매개변수
맞춤 이벤트 어댑터에 전달되는 선택적 인수입니다.

맞춤 이벤트 구현하기

맞춤 이벤트는 GADMediationAdapter 프로토콜을 구현하여 타사의 광고를 게재하는 클래스입니다. 아래 단계에 구현된 맞춤 이벤트에서는 샘플 광고 네트워크에 보상형 광고를 요청하고 표시합니다.

GADMediationAdapter 구현하기

맞춤 이벤트를 만드는 첫 번째 단계는 아래의 GADMediationAdapterSampleAdNetwork 클래스와 같이 GADMediationAdapter 프로토콜을 구현하는 것입니다.

#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 모바일 광고 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

보상형 광고 요청하기

앱에서 보상형 광고를 로드하도록 요청하면 맞춤 이벤트의 loadRewardedAdForAdConfiguration:completionHandler: 메소드를 실행합니다.

GADMediationRewardedAd를 구현하는 객체에 대한 참조와 함께 제공된 completionHandler를 실행하여 광고 로드가 성공했음을 Google 모바일 광고 SDK에 보고합니다. 이 실행은 GADMediationRewardedAdEventDelegate를 반환합니다. 맞춤 이벤트는 이 객체에 대한 참조를 유지하여 광고 주기 이벤트를 Google 모바일 광고 SDK에 알려야 합니다. 자세한 내용은 광고 게재하기 섹션을 참조하세요.

광고 로드 오류를 보고하려면 제공된 completionHandler를 NSError 객체와 함께 실행하세요.

다음은 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 {
  // Look for the "parameter" key to fetch the parameter you defined in the AdMob UI.
  NSString *adUnit = adConfiguration.credentials.settings[@"parameter"];
  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 모바일 광고 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 모바일 광고 SDK에 적절한 광고 주기 이벤트를 보고해야 합니다.

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

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

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

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

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

- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward {
  GADAdReward *aReward =
      [[GADAdReward alloc] initWithRewardType:@""
                                 rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
  [self.delegate didRewardUserWithReward:aReward];
}
}

Google 모바일 광고 SDK에 보고해야 하는 광고 이벤트의 내용은 다음과 같습니다.

광고 이벤트 설명
willPresentFullScreenView Google 모바일 광고 SDK에 광고가 표시될 것임을 알립니다.
didStartVideo Google 모바일 광고 SDK에 보상형 광고의 재생이 시작되었음을 알립니다.
reportImpression Google 모바일 광고 SDK에 광고 노출이 발생했음을 알립니다.
didEndVideo Google 모바일 광고 SDK에 보상형 광고의 재생이 완료되었음을 알립니다.
didRewardUserWithReward Google 모바일 광고 SDK에 사용자가 보상을 받았음을 알립니다.
reportClick Google 모바일 광고 SDK에 광고가 클릭되었음을 알립니다.
willDismissFullScreenView Google 모바일 광고 SDK에 광고가 닫힐 것임을 알립니다.