보상형 광고

보상형 광고는 상호작용하는 사용자에게 인앱 보상을 제공하는 광고입니다. 이 가이드에는 AdMob의 보상형 광고를 iOS 앱에 통합하는 방법이 나와 있습니다. 고객 성공사례인 우수사례 1우수사례 2를 읽어보세요.

기본 요건

  • Google 모바일 광고 SDK 8.0.0 이상
  • 시작하기 가이드에 따라 Google 모바일 광고 SDK를 가져옵니다.

항상 테스트 광고로 테스트

앱을 제작하고 테스트할 때 운영 중인 실제 광고가 아닌 테스트 광고를 사용하세요. 이렇게 하지 않으면 계정이 정지될 수 있습니다.

테스트 광고를 로드하는 가장 쉬운 방법은 iOS 보상형 광고의 테스트 전용 광고 단위 ID를 사용하는 것입니다.

ca-app-pub-3940256099942544/1712485313

이 ID는 모든 요청에 대해 테스트 광고를 반환하도록 특별히 구성되었으며, 코딩, 테스트 및 디버깅 중에 앱에서 자유롭게 사용할 수 있습니다. 앱을 게시하기 전에 이 ID를 자체 광고 단위 ID로 바꿔야 합니다.

모바일 광고 SDK의 테스트 광고가 작동하는 방식을 자세히 알아보려면 테스트 광고를 참고하세요.

구현

보상형 광고를 통합하는 기본 단계는 아래와 같습니다.

  1. 광고를 로드합니다.
  2. 콜백을 등록합니다.
  3. 광고를 표시하고 보상 이벤트를 처리합니다.

광고 로드

광고는 GADRewardedAd 클래스의 정적 loadWithAdUnitID:request:completionHandler: 메서드를 사용하여 로드됩니다. 로드 메서드에는 광고 단위 ID, GADRequest 객체, 광고 로드에 성공하거나 실패할 때 호출되는 완료 핸들러가 필요합니다. 로드된 GADRewardedAd 객체는 완료 핸들러의 매개변수로 제공됩니다. 아래는 ViewController 클래스의 GADRewardedAd를 로드하는 방법의 예입니다.

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

콜백 등록

표시 이벤트 알림을 받으려면 GADFullScreenContentDelegate 프로토콜을 구현하고 이를 반환된 광고의 fullScreenContentDelegate 속성에 할당해야 합니다. GADFullScreenContentDelegate 프로토콜은 광고 표시에 성공 또는 실패했을 때와 광고가 닫혔을 때의 콜백을 처리합니다. 다음은 프로토콜을 구현하고 이를 광고에 할당하는 방법을 나타내는 코드입니다.

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.fullScreenContentDelegate = self;
      }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad presented full screen content.
- (void)adDidPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad did present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
   NSLog(@"Ad did dismiss full screen content.");
}

GADRewardedAd는 일회용 객체입니다. 즉, 보상형 광고가 표시된 후에는 다시 표시되지 않습니다. 이전 광고가 닫히자마자 다음 보상형 광고가 로드될 수 있도록 adDidDismissFullScreenContent: 메서드로 GADFullScreenContentDelegate에 다른 보상형 광고를 로드하는 것이 좋습니다.

광고 표시 및 보상 이벤트 처리

보상형 광고를 게재하기 전에 보상을 받는 대가로 보상형 광고 콘텐츠를 볼 것인지 여부를 선택할 수 있는 옵션을 사용자에게 명확히 제공해야 합니다. 보상형 광고에는 항상 선택 옵션을 제공해야 합니다.

광고를 표시할 때 사용자의 보상을 처리할 GADUserDidEarnRewardHandler 객체를 제공해야 합니다.

다음 코드는 보상형 광고를 게재하기 위한 최적의 메서드를 나타냅니다.

Objective-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

FAQ

GADRewardedAd에 대한 보상 세부정보를 확인할 수 있나요?
예. 가능합니다. userDidEarnReward 콜백이 실행되기 전에 보상 수량을 알아야 하는 경우 GADRewardedAdadReward 속성에서 광고가 로드된 후의 보상 수량을 확인할 수 있습니다.
초기화 호출에 제한 시간이 있나요?
10초가 지나면 미디에이션 네트워크에서 아직 초기화를 완료하지 않은 경우에도 Google 모바일 광고 SDK에서 startWithCompletionHandler: 메소드에 제공된 GADInitializationCompletionHandler를 호출합니다.
초기화 콜백을 받았을 때 일부 미디에이션 네트워크가 준비되지 않은 경우 어떻게 해야 하나요?

GADInitializationCompletionHandler 내에서 광고를 로드하는 것이 좋습니다. 미디에이션 네트워크가 준비되지 않은 경우에도 Google 모바일 광고 SDK에서 해당 네트워크에 광고를 요청합니다. 따라서 미디에이션 네트워크에서 시간이 초과된 후에 초기화를 완료하면 해당 세션에서 향후 광고 요청을 처리할 수 있습니다.

GADMobileAds.initializationStatus를 호출하여 앱 세션의 어느 시점에서든 모든 어댑터의 초기화 상태를 알아볼 수 있습니다.

특정 미디에이션 네트워크가 준비되지 않은 이유를 확인하려면 어떻게 해야 하나요?

GADAdapterStatus 객체의 description 속성에서 어댑터에서 광고 요청을 처리할 준비가 되지 않은 이유를 알아볼 수 있습니다.