본문으로 건너뛰기

결합 광고

NAM SDK 에서는 GFPAdLoader 를 통해서 배너와 네이티브 그리고 네이티브 심플 광고를 동시에 수신할 수 있는 방법을 제공합니다.
하나의 지면에서 여러 유형을 지원해야 하기 때문에 광고 유닛 설정이 필요하니 GFP 담당자와 논의가 필요합니다.

NAMSDK Import

SDK 모듈을 import 합니다.

import GFPSDK

Dependency 추가 및 초기화

배너 광고 네이티브 광고 설정을 참고해 주시기 바랍니다.

뷰 컨트롤러 작성

뷰 컨트롤러(MyViewController)를 만들고, 헤더파일(MyViewController.h)에 아래 작업을 수행합니다.

  1. 뷰 컨트롤러에 GFPAdLoader *adLoader 프로퍼티를 선언합니다.
  2. 뷰 컨트롤러에 GFPAdLoaderDelegate 프로토콜을 구현합니다.
정보

GFPAdLoaderDelegate는 네이티브 광고 로드 관련 이벤트를 전달합니다.

  1. 뷰 컨트롤러에 GFPBannerView *bannerView 프로퍼티를 선언합니다.
  2. 뷰 컨트롤러에 GFPBannerViewDelegate 프로토콜을 구현합니다.
정보

GFPBannerViewDelegate는 로드된 배너 객체의 노출, 클릭, 렌더링 에러등의 이벤트를 전달합니다.

  1. 뷰 컨트롤러에 GFPNativeAd *nativeAd 프로퍼티를 선언합니다.
  2. 뷰 컨트롤러에 GFPNativeAdDelegate 프로토콜을 구현합니다.
정보

GFPNativeAdDelegate는 로드된 네이티브 객체의 노출, 클릭, 렌더링 에러등의 이벤트를 전달합니다.

  1. 뷰 컨트롤러에 GFPNativeSimpleAd *nativeSimpleAd 프로퍼티를 선언합니다.
  2. 뷰 컨트롤러에 GFPNativeSimpleAdDelegate 프로토콜을 구현합니다.
정보

GFPNativeSimpleAdDelegate는 로드된 네이티브 심플 객체의 노출, 클릭, 렌더링 에러등의 이벤트를 전달합니다.

// MyViewController.h
import GFPSDK

class MyViewController : UIViewController,
GFPAdLoaderDelegate,
GFPBannerViewDelegate,
GFPNativeAdDelegate,
GFPNativeSimpleAdDelegate {

private var adLoader : GFPAdLoader?
private var bannerView : GFPBannerView?

private var nativeSimpleAd : GFPNativeAd?
private var nativeSimpleAdView : GFPNativeAdView?

private var nativeSimpleAd : GFPNativeSimpleAd?
private var nativeSimpleAdView : GFPNativeSimpleAdView?
}

GFPAdLoader 생성 및 광고 요청

MyViewController.m의 viewDidLoad 메소드에서 GFPAdLoader의 인스턴스를 생성하고, 광고를 요청합니다.

  • GFPAdLoader 인스턴스를 생성할 때, 발급받으신 광고유닛 ID와 함께, GFPAdParam 에서 사용자 정보를 세팅해주세요. GFPAdParam은 광고 효과를 높이기 위한 타게팅에 사용됩니다.

  • 사용하고자 하는 광고들에 대해 GFPAdLoader에 Option과 Delegate들을 설정해줍니다.

override func viewDidLoad() {
super.viewDidLoad()

let adParam = GFPAdParam()
adParam.yearOfBirth = 1990
adParam.gender = .male
...

self.adLoader = GFPAdLoader(unitID: "UnitId", rootViewController: self, adParam: adParam)

//배너 옵션 설정
let bannerOption = GFPAdBannerOptions()
bannerOption.layoutType = .fluidWidth
self.adLoader?.setBannerDelegate(self, bannerOptions: bannerOption)

//네이티브 일반 설정
let nativeOption = GFPAdNativeOptions()
nativeOption.renderingSetting = ... // 로드될 네이티브 일반형 광고 렌더링 설정
self.adLoader?.setNativeDelegate(self, nativeOptions: nativeOption)

//네이티브 심플 설정
let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.renderingSetting = ... // 로드될 네이티브 일반형 광고 렌더링 설정
self.adLoader?.setNativeSimpleDelegate(self, nativeSimpleOptions: nativeSimpleOption)

self.adLoader?.delegate = self
self.adLoader?.loadAd()
}
정보

모펍의 경우 rootViewController가 nil이면, 내부적으로 UIApplication.sharedApplication.delegate.window.rootViewController로 세팅됨

GFPAdLoader 광고 로드 이벤트 수신

  • 결합된 광고는 각각의 광고 타입에 연결된 Delegate 이벤트를 수신합니다. 수신하는 이벤트 들의 목록은 아래와 같습니다.
    • 배너 광고 응답 성공 시 GFPAdLoaderDelegateadLoader:didReceiveBannerAd: 메소드가 호출됩니다. GFPBannerView는 일반적인 뷰 객체(UIView)이므로, 뷰 계층구조에 포함될 수 있습니다.
    • 네이티브 일반 광고 응답 성공 시 GFPAdLoaderDelegateadLoader:didReceiveNativeAd: 메소드가 호출됩니다.
    • 네이티브 심플 광고 응답 성공 시 GFPAdLoaderDelegateadLoader:didReceiveNativeSimpleAd: 메소드가 호출됩니다.
    • 광고 응답 실패 시에는 GFPAdLoaderDelegateadLoader:didFailWithError:responseInfo: 메소드가 호출됩니다.

GFPAdLoader 이후 이벤트 수신 및 렌더링 가이드

메타 데이터 조회하기

배너, 네이티브, 네이티브 심플 광고의 경우 서버가 제공하는 경우에 한하여 이벤트 발생 시 광고 정보를 확인할 수 있습니다. 로드 성공 시, 광고 노출 발생 시, 클릭 이벤트 발생 시 해당 정보가 전달됩니다.

로드 성공 시

func adLoader(_ unifiedAdLoader: GFPAdLoader, didReceiveNativeAd nativeAd: GFPNativeAd) {
if let adMetaData = nativeAd.adMetaData {
let adMetaDataMessage = String(format: "Native Ad Context (loaded) %@", adMetaData.adContext)
print(adMetaDataMessage)
}
}

광고 노출 발생 시

func bannerAdWasSeen(_ bannerView: GFPBannerView) {
...
if let adMetaData = bannerView.adMetaData {
let adMetaDataMessage = String(format: "Banner Ad Context (seen) %@", adMetaData.adContext)
print(adMetaDataMessage)
}
}

클릭 이벤트 발생 시

func nativeSimpleAdWasClicked(_ nativeSimpleAd: GFPNativeSimpleAd) {
if let adContext = nativeSimpleAd.adMetaData?.adContext {
let adMetaDataMessage = String(format: "Native Simple Ad Context (clicked) %@", adContext)
print(adMetaDataMessage)
}
}

네이티브 광고의 Slot Index 확인

func nativeAdWasClicked(_ nativeAd: GFPNativeAd) {
if let slotIndex = nativeAd.adMetaData?.slotIndex, slotIndex.intValue >= 0 {
let slotIndexMessage = String(format: "Native Ad Slot Index (clicked) %ld", slotIndex.intValue)
print(slotIndexMessage)
}
}