본문으로 건너뛰기

시작하기

보상형 광고는 전체 화면을 사용하며, 광고 시청자에게 보상을 주는 동영상 광고입니다.

샘플 이미지

선행 챕터

의존성 추가

보상형 광고를 사용하기 위해서는 Podfile에 GFPSDK/MediationNDARich 모듈을 추가해야 합니다.

# static library 사용 시
pod 'GFPSDK/MediationNDARich'

# dynamic library 사용 시
pod 'GFPSDK-Dynamic/MediationNDARich'

NAMSDK Import

SDK 모듈을 import 합니다.

import GFPSDK

C2S 보상형 광고 제공자 초기화

연동할 보상형 광고 제공자의 Pod이 프로젝트에 추가된 상태에서 GFPAdManager를 통해 초기화 합니다. (앱이 구동되는 시점에 한번만 수행)

Provider OptionAd ProviderCocoaPods
GFPRewardedAdProviderOptionNDA네이버 NDApod 'GFPSDK/MediationNDA'
GFPRewardedAdProviderOptionDFP구글 GAM (Google Ad Manager)pod 'GFPSDKMediationDFP'
GFPRewardedAdProviderOptionFANMeta Audience Networkpod 'GFPSDKMediationFAN'
GFPRewardedAdProviderOptionUnityUnity Adspod 'GFPSDKMediationUnity'
GFPRewardedAdProviderOptionAppLovinAppLovin MAXpod 'GFPSDKMediationAppLovin'
GFPRewardedAdProviderOptionVungleLiftoff (Vungle)pod 'GFPSDKMediationVungle'
GFPRewardedAdProviderOptionDTDigital Turbinepod 'GFPSDKMediationDT'
GFPRewardedAdProviderOptionISIronSourcepod 'GFPSDKMediationIronSource'
GFPRewardedAdProviderOptionAPSAmazon Publisher Servicespod 'GFPSDKMediationAPS'
GFPRewardedAdProviderOptionLANLINE Ads Networkpod 'GFPSDKMediationLAN'
GFPRewardedAdProviderOptionChartBoostChartboostpod 'GFPSDKMediationChartBoost'
GFPRewardedAdProviderOptionBidMachineBidMachinepod 'GFPSDKMediationBidMachine'
GFPRewardedAdProviderOptionPanglePanglepod 'GFPSDKMediationPangle'
정보

S2S 보상형 광고는 별도의 제공자 초기화가 필요 없습니다.

// DFP, Facebook 보상형 광고를 연동하려는 경우 cocoapods 의존성 추가.
GFPAdManager.setup(withPublisherCd: "publisherCd") { (error : GFPError?) in
print("Setup Eror: \(String(describing: error?.description))")
}

GFPAdManager 상세 설정 방법은 광고매니저 설정을 참고해 주세요.

뷰 컨트롤러 작성

뷰 컨트롤러(MyViewController)를 만들고, 헤더파일(MyViewController.h)에 아래 작업을 수행합니다.
(이 예제에서는 뷰 컨트롤러가 매니저를 소유하는 형식으로 구현합니다.)

  1. 뷰 컨트롤러에 GFPRewardedAdManager *adManager 프로퍼티를 선언합니다.
  2. 뷰 컨트롤러에 GFPRewardedAdManagerDelegate 프로토콜을 구현합니다.

GFPRewardedAdManagerDelegate 는 보상형 광고의 로드, 실패 여부 및 클릭 여부를 전달합니다.

// MyViewController.h
import GFPSDK

class MyViewController : UIViewController, GFPRewardedAdManagerDelegate {
private var adManager : GFPReweardedAdManager?
}

GFPReweardedAdManager 사용 가이드

GFPReweardedAdManager 생성 및 광고 로드 요청

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

  • 인스턴스를 생성 후에는 delegate를 잊지말고 설정해줍니다.
  • GFPReweardedAdManager 인스턴스를 생성할 때, 발급받으신 광고유닛 ID와 함께, GFPAdParam 에서 사용자 정보를 세팅해주세요. GFPAdParam은 광고 효과를 높이기 위한 타게팅에 사용됩니다.
override func viewDidLoad() {
super.viewDidLoad()

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

//인스턴스 생성
self.adManager = GFPRewardedAdManager(unitID: "UnitID", adParam: adParam)
//Delegate
self.adManager?.delegate = self
//Timeout
self.adManager?.requestTimeoutInterval = 60
//광고 요청
self.adManager?.load()
}

매니저는 한개의 광고를 로드하면 사용성이 다하도록 설계되었습니다. 새로운 광고를 로드할 때는 새로운 매니저를 다시 만들어주세요.

광고 요청 성공 시 GFPRewardedAdManagerDelegate rewardedAdManager:didLoadAd: 메소드가 호출됩니다.

보상형 광고 비디오 재개

보상형 광고 비디오를 일시정지한 후 다시 재개할 때는 resumeCurrentRewardVideo 클래스 메서드를 사용합니다.

GFPRewardedAdManager.resumeCurrentRewardVideo()

광고 노출 요청

GFPRewardedAdManagerDelegate rewardedAdManager:didLoadAd: 로 성공 응답을 받았다면, show:(UIViewController *) 메서드로 광고 노출을 요청할 수 있습니다.

광고 로드 완료 확인

광고가 성공적으로 로드되었는지 확인할 때는 isAdLoaded 프로퍼티를 사용합니다.

if self.adManager?.isAdLoaded == true {
// 광고가 로드된 상태입니다.
}

광고 무효화 확인

미리 로드하여 캐싱한 광고를 게재할 경우 반드시 isAdInvalidate 메서드를 사용해 광고가 만료되었는지 확인해야 합니다. 만료된 광고를 게재하면 광고 노출에 대한 보상을 받을 수 없습니다.

if rewardedAd.isAdInvalidate {
self.adManager?.show(self)
}

광고 노출 요청 시, 노출에 실패한다면 GFPRewardedAdManagerDelegate rewardedAdManager:didFailWithError:responseInfo: 메소드가 호출됩니다.

광고 로드와 광고 노출이 분리되어 있기 때문에, 로드를 먼저 한 후에 노출을 하는 형식으로 구현할 수 있습니다. 이 때의 로드된 광고 유효시간은 DFP, FAN : 60분입니다.

GFPRewardedAdManagerDelegate

GFPRewardedAdManagerDelegate를 구현하시면, 해당 메서드를 통해서 보상형 광고의 이벤트를 전달받을 수 있습니다.

로드 이벤트

로드 성공 시

func rewardedAdManager(_ manager: GFPRewardedAdManager, didLoad rewardedAd: GFPRewardedAd) {
...
}

로드 실패 시

func rewardedAdManager(_ manager: GFPRewardedAdManager, didFailWithError error: GFPError, responseInfo:GFPLoadResponseInfo!) {
...
}

로드 실패 뿐만 아니라 화면 노출 실패, 유효기간 만료 등의 실패 사항도 모두 해당 메서드로 전달받을 수 있습니다.

LifeCycle Event

광고 시청 화면 시작 시

func rewardedAdManager(_ manager: GFPRewardedAdManager, didStart rewardedAd: GFPRewardedAd) {
...
}

광고 시청 완료

func rewardedAdManager(_ manager: GFPRewardedAdManager, didComplete rewardedAd: GFPRewardedAd, with reward: GFPReward?) {
...
}

FAN에서는 보상 정보를 알려주지 않기 때문에, reward 값이 없습니다.

광고 화면 사라질 시

func rewardedAdManager(_ manager: GFPRewardedAdManager, didClose rewardedAd: GFPRewardedAd) {
...
}

광고 화면 클릭 시

func rewardedAdManager(_ manager: GFPRewardedAdManager, wasClickedAd rewardedAd: GFPRewardedAd) {
...
}

7.x.x대의 DFP 버전에서는 클릭 이벤트를 지원하지 않아 이벤트가 오지 않습니다.

아래 메서드들은 @optional로 선언된 메서드이므로, 필요한 경우에만 선택적으로 구현하면 됩니다.

음소거 상태 변경 시 (S2S 광고 전용)

S2S 광고에서 플레이어의 음소거 상태가 변경될 때 호출됩니다.

func rewardedAdManager(_ manager: GFPRewardedAdManager, didChangedMute isMuted: Bool) {
...
}

광고 노출(Impression) 발생 시

광고가 실제로 노출(impression)될 때 호출됩니다.

func rewardedAdManagerDidReceiveImpression(_ manager: GFPRewardedAdManager) {
...
}

인앱 브라우저 열릴 때

광고 클릭 등으로 인앱 브라우저가 열릴 때 호출됩니다.

func rewardedAdManagerDidPresentDefaultInAppBrowser(_ manager: GFPRewardedAdManager) {
...
}

인앱 브라우저 닫힐 때

인앱 브라우저가 닫힐 때 호출됩니다.

func rewardedAdManagerDidDismissDefaultInAppBrowser(_ manager: GFPRewardedAdManager) {
...
}