네이티브 광고

네이티브 광고는 플랫폼 고유의 UI 구성요소를 통해 사용자에게 제공되는 광고 애셋입니다. 이 광고는 스토리보드에 사용되는 것과 동일한 클래스를 통해 표시되며 앱의 시각적 디자인과 잘 어울리도록 만들 수 있습니다. 네이티브 광고가 로드되면 광고 애셋이 포함된 광고 객체를 앱에서 수신하며, 이때 SDK가 아니라 앱이 직접 광고를 표시합니다. 이는 광고의 모양을 맞춤설정할 수 없는 다른 광고 형식과는 다릅니다.

본 가이드에서는 Google 모바일 광고 SDK를 활용하여 네이티브 광고 를 iOS 앱에 구현하는 방법과 이 과정에서 고려해야 할 사항을 다룹니다.

일반적으로 네이티브 광고의 성공적인 구현은 SDK를 통해 광고를 로드하는 작업과 앱에 광고 콘텐츠를 표시하는 작업으로 구성됩니다. 이 페이지에서는 SDK를 사용하여 광고를 로드하는 방법을 설명합니다.

기본 요건

항상 테스트 광고로 테스트

앱을 제작하고 테스트할 때 실제 광고 대신 테스트 광고를 사용하세요. 실제 광고로 테스트하면 계정이 정지될 수 있습니다.

테스트 광고를 로드하는 가장 쉬운 방법은 iOS에서 네이티브 광고 고급형의 테스트 전용 광고 단위 ID를 사용하는 것입니다.

ca-app-pub-3940256099942544/3986624511

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

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

광고 로드

네이티브 광고의 시스템 정의 형식에는 앱 설치 광고와 콘텐츠 광고라는 두 가지 유형이 있습니다.

두 유형의 광고는 모두 하나의 GADUnifiedNativeAd 클래스로 표현됩니다. 이 클래스의 인스턴스에는 네이티브 광고 애셋이 포함됩니다. GADUnifiedNativeAd에 의해 나타내는 광고 유형에 따라 일부 필드는 채워지지 않습니다(즉 nil 상태가 됨).

네이티브 광고는 GADAdLoader 객체를 통해 로드되며, 이 객체는 GADAdLoaderDelegate 프로토콜에 따라 대리자에게 메시지를 보냅니다.

광고 로더 초기화

광고를 로드하기 전에 광고 로더를 초기화해야 합니다. 다음 코드에 GADAdLoader를 초기화하는 방법이 나와 있습니다.

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ kGADAdLoaderAdTypeUnifiedNative ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

광고 단위 ID(테스트 ID를 사용할 수 있음), adTypes 배열을 전달하여 요청할 네이티브 형식을 지정할 상수, options 매개변수에 설정할 옵션이 필요합니다. options 매개변수에 사용할 수 있는 값은 네이티브 광고 옵션 설정 페이지에서 확인할 수 있습니다.

adTypes 배열에는 다음 상수가 포함되어야 합니다.

광고 로더 대리자 구현

광고 로더 대리자는 광고 유형별 프로토콜을 구현해야 합니다. unified 네이티브 광고의 경우는 다음과 같습니다.

  • GADUnifiedNativeAdLoaderDelegate. 이 프로토콜에는 통합 네이티브 광고가 로드된 후 대리자로 전송되는 메시지가 포함됩니다.

    Swift

    public func adLoader(_ adLoader: GADAdLoader,
        didReceive nativeAd: GADUnifiedNativeAd)
    

    Objective-C

    - (void)adLoader:(GADAdLoader *)adLoader
        didReceiveNativeAd:(GADUnifiedNativeAd *)nativeAd;
    

광고 요청

GADAdLoader가 초기화되었으면 loadRequest: 메서드를 호출하여 광고를 요청합니다.

Swift

adLoader.load(GADRequest())

Objective-C

[self.adLoader loadRequest:[GADRequest request]];

GADAdLoaderloadRequest: 메서드는 배너 및 전면 광고와 동일한 GADRequest 객체를 허용합니다. 다른 광고 유형에서처럼 객체를 요청하여 타겟팅 정보를 추가할 수도 있습니다.

광고 요청 시점

네이티브 광고를 게재하는 앱은 실제로 광고가 표시되기 전에 미리 요청할 수 있습니다. 일반적으로 이러한 방식을 권장합니다. 예를 들어 네이티브 광고가 포함된 목록을 표시하는 앱은 전체 목록에 대한 네이티브 광고를 로드할 수 있습니다. 이 경우 일부는 사용자가 보기를 스크롤한 후에만 표시되고, 일부는 전혀 표시되지 않을 수 있습니다.

광고를 미리 가져오는 것은 매우 유용한 기술이지만, 광고를 가져와서 표시하지 않은 상태로 너무 오래 보관하지 않도록 주의해야 합니다. 1시간 이상 표시되지 않고 유지된 네이티브 광고 객체는 삭제한 후 새 요청을 통해 새 광고로 대체해야 합니다.

로드 완료 시점 확인하기

앱에서 loadRequest:를 호출하면 다음에 대한 호출을 통해 요청 결과를 얻을 수 있습니다.

단일 광고에 대한 요청으로 이러한 메서드 중 하나에 대한 호출이 발생합니다.

여러 광고를 요청하면 위 메서드에 대한 콜백이 하나 이상 발생하지만, 요청된 광고의 최대 개수는 넘지 않습니다.

또한 GADAdLoaderDelegate에서는 adLoaderDidFinishLoading 콜백을 제공합니다. 이러한 대리자 메서드는 광고 로더를 통한 광고 로드를 완료했음을 나타내며, 요청에 대해 다른 광고 또는 오류는 보고되지 않습니다. 다음은 한 번에 여러 네이티브 광고를 로드하는 방법을 보여주는 예입니다.

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdsOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdsOptions.numberOfAds = 5

    adLoader = GADAdLoader(adUnitID: YOUR_AD_UNIT_ID, rootViewController: self,
        adTypes: [GADAdLoaderAdType.unifiedNative],
        options: [multipleAdsOptions])
    adLoader.delegate = self
    adLoader.load(GADRequest())
  }

  func adLoader(_ adLoader: GADAdLoader,
                didReceive nativeAd: GADUnifiedNativeAd) {
    // A unified native ad has loaded, and can be displayed.
  }

  func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
      // The adLoader has finished loading ads, and a new request can be sent.
  }

}

Objective-C

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;

  self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:YOUR_AD_UNIT_ID
          rootViewController:self
                     adTypes:@[kGADAdLoaderAdTypeUnifiedNative]
                     options:@[multipleAdsOptions]];
  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
   // A unified native ad has loaded, and can be displayed.
}

- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}

@end

실패한 요청 처리

위 프로토콜은 광고 로드에 실패했을 때 전송되는 메시지를 정의하는 GADAdLoaderDelegate 프로토콜을 확장합니다. GADRequestError 객체를 사용하여 오류의 원인을 파악할 수 있습니다.

Swift

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: GADRequestError)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(GADRequestError *)error;

네이티브 광고 이벤트 알림 받기

네이티브 광고 상호작용과 관련된 이벤트에 대한 알림을 받으려면 네이티브 광고의 대리자 속성을 설정하세요.

Swift

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

그런 다음 GADUnifiedNativeAdDelegate를 구현하여 다음 대리자 호출을 수신하세요.

Swift

func nativeAdDidRecordImpression(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

Objective-C

- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

광고 게재하기

광고를 로드한 후에는 사용자에게 광고를 게재하는 일만 남게 됩니다. 광고 게재 방식을 알아보려면 네이티브 광고 고급형 가이드를 참고하세요.