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

선행 챕터
의존성 추가
보상형 광고를 사용하기 위해서는 Podfile에 GFPSDK/MediationNDARich 모듈을 추가해야 합니다.
# static library 사용 시
pod 'GFPSDK/MediationNDARich'
# dynamic library 사용 시
pod 'GFPSDK-Dynamic/MediationNDARich'
NAMSDK Import
SDK 모듈을 import 합니다.
- Swift
- Objective-C
import GFPSDK
@import GFPSDK;
C2S 보상형 광고 제공자 초기화
연동할 보상형 광고 제공자의 Pod이 프로젝트에 추가된 상태에서 GFPAdManager를 통해 초기화 합니다. (앱이 구동되는 시점에 한번만 수행)
| Provider Option | Ad Provider | CocoaPods |
|---|---|---|
| GFPRewardedAdProviderOptionNDA | 네이버 NDA | pod 'GFPSDK/MediationNDA' |
| GFPRewardedAdProviderOptionDFP | 구글 GAM (Google Ad Manager) | pod 'GFPSDKMediationDFP' |
| GFPRewardedAdProviderOptionFAN | Meta Audience Network | pod 'GFPSDKMediationFAN' |
| GFPRewardedAdProviderOptionUnity | Unity Ads | pod 'GFPSDKMediationUnity' |
| GFPRewardedAdProviderOptionAppLovin | AppLovin MAX | pod 'GFPSDKMediationAppLovin' |
| GFPRewardedAdProviderOptionVungle | Liftoff (Vungle) | pod 'GFPSDKMediationVungle' |
| GFPRewardedAdProviderOptionDT | Digital Turbine | pod 'GFPSDKMediationDT' |
| GFPRewardedAdProviderOptionIS | IronSource | pod 'GFPSDKMediationIronSource' |
| GFPRewardedAdProviderOptionAPS | Amazon Publisher Services | pod 'GFPSDKMediationAPS' |
| GFPRewardedAdProviderOptionLAN | LINE Ads Network | pod 'GFPSDKMediationLAN' |
| GFPRewardedAdProviderOptionChartBoost | Chartboost | pod 'GFPSDKMediationChartBoost' |
| GFPRewardedAdProviderOptionBidMachine | BidMachine | pod 'GFPSDKMediationBidMachine' |
| GFPRewardedAdProviderOptionPangle | Pangle | pod 'GFPSDKMediationPangle' |
S2S 보상형 광고는 별도의 제공자 초기화가 필요 없습니다.
- Swift
- Objective-C
// DFP, Facebook 보상형 광고를 연동하려는 경우 cocoapods 의존성 추가.
GFPAdManager.setup(withPublisherCd: "publisherCd") { (error : GFPError?) in
print("Setup Eror: \(String(describing: error?.description))")
}
// DFP, NDA, Inmobi, Facebook 배너 광고를 연동하려는 경우 cocoapods 의존성 추가.
[GFPAdManager setupWithPublisherCd:@"publisherCd" completionHandler:^(GFPError * _Nullable error) {
NSLog(@"Setup ERROR: %@", error);
}];
GFPAdManager 상세 설정 방법은 광고매니저 설정을 참고해 주세요.
뷰 컨트롤러 작성
뷰 컨트롤러(MyViewController)를 만들고, 헤더파일(MyViewController.h)에 아래 작업을 수행합니다.
(이 예제에서는 뷰 컨트롤러가 매니저를 소유하는 형식으로 구현합니다.)
- 뷰 컨트롤러에 GFPRewardedAdManager *adManager 프로퍼티를 선언합니다.
- 뷰 컨트롤러에 GFPRewardedAdManagerDelegate 프로토콜을 구현합니다.
GFPRewardedAdManagerDelegate 는 보상형 광고의 로드, 실패 여부 및 클릭 여부를 전달합니다.
- Swift
- Objective-C
// MyViewController.h
import GFPSDK
class MyViewController : UIViewController, GFPRewardedAdManagerDelegate {
private var adManager : GFPReweardedAdManager?
}
// MyViewController.h
@import GFPSDK;
@interface MyViewController : UIViewController <GFPRewardedAdManagerDelegate>
@property (nonatomic) GFPRewardedAdManager *adManager;
@end
GFPReweardedAdManager 사용 가이드
GFPReweardedAdManager 생성 및 광고 로드 요청
MyViewController.m의 viewDidLoad 메소드에서 GFPReweardedAdManager의 인스턴스를 생성하고, 광고를 요청합니다.
- 인스턴스를 생성 후에는 delegate를 잊지말고 설정해줍니다.
- GFPReweardedAdManager 인스턴스를 생성할 때, 발급받으신 광고유닛 ID와 함께, GFPAdParam 에서 사용자 정보를 세팅해주세요. GFPAdParam은 광고 효과를 높이기 위한 타게팅에 사용됩니다.
- Swift
- Objective-C
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()
}
- (void)viewDidLoad {
[super viewDidLoad];
GFPAdParam *adParam = [[GFPAdParam alloc]init];
adParam.yearOfBirth = 1990;
adParam.gender = GFPAdParamGenderTypeMale;
...
//인스턴스 생성
self.adManager = [[GFPRewardedAdManager alloc] initWithUnitID:@"UnitID" adParam:adParam];
//Delegate
self.adManager.delegate = self;
//Timeout
self.adManager.requestTimeoutInterval = 60;
//광고 요청
[self.adManager load];
}
매니저는 한개의 광고를 로드하면 사용성이 다하도록 설계되었습니다. 새로운 광고를 로드할 때는 새로운 매니저를 다시 만들어주세요.
광고 요청 성공 시 GFPRewardedAdManagerDelegate rewardedAdManager:didLoadAd: 메소드가 호출됩니다.
보상형 광고 비디오 재개
보상형 광고 비디오를 일시정지한 후 다시 재개할 때는 resumeCurrentRewardVideo 클래스 메서드를 사용합니다.
- Swift
- Objective-C
GFPRewardedAdManager.resumeCurrentRewardVideo()
[GFPRewardedAdManager resumeCurrentRewardVideo];
광고 노출 요청
GFPRewardedAdManagerDelegate rewardedAdManager:didLoadAd: 로 성공 응답을 받았다면,
show:(UIViewController *) 메서드로 광고 노출을 요청할 수 있습니다.
광고 로드 완료 확인
광고가 성공적으로 로드되었는지 확인할 때는 isAdLoaded 프로퍼티를 사용합니다.
- Swift
- Objective-C
if self.adManager?.isAdLoaded == true {
// 광고가 로드된 상태입니다.
}
if (self.adManager.isAdLoaded) {
// 광고가 로드된 상태입니다.
}
광고 무효화 확인
미리 로드하여 캐싱한 광고를 게재할 경우 반드시 isAdInvalidate 메서드를 사용해 광고가 만료되었는지 확인해야 합니다. 만료된 광고를 게재하면 광고 노출에 대한 보상을 받을 수 없습니다.
- Swift
- Objective-C
if rewardedAd.isAdInvalidate {
self.adManager?.show(self)
}
if (rewardedAd.isAdInvalidate) {
[self.adManager show:self];
}
광고 노출 요청 시, 노출에 실패한다면 GFPRewardedAdManagerDelegate rewardedAdManager:didFailWithError:responseInfo: 메소드가 호출됩니다.
광고 로드와 광고 노출이 분리되어 있기 때문에, 로드를 먼저 한 후에 노출을 하는 형식으로 구현할 수 있습니다. 이 때의 로드된 광고 유효시간은 DFP, FAN : 60분입니다.
GFPRewardedAdManagerDelegate
GFPRewardedAdManagerDelegate를 구현하시면, 해당 메서드를 통해서 보상형 광고의 이벤트를 전달받을 수 있습니다.
로드 이벤트
로드 성공 시
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, didLoad rewardedAd: GFPRewardedAd) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager didLoadAd:(nonnull GFPRewardedAd *)rewardedAd {
...
}
로드 실패 시
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, didFailWithError error: GFPError, responseInfo:GFPLoadResponseInfo!) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager didFailWithError:(nonnull GFPError *)error responseInfo:(nullable GFPLoadResponseInfo *)responseInfo {
...
}
로드 실패 뿐만 아니라 화면 노출 실패, 유효기간 만료 등의 실패 사항도 모두 해당 메서드로 전달받을 수 있습니다.
LifeCycle Event
광고 시청 화면 시작 시
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, didStart rewardedAd: GFPRewardedAd) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager didStartAd:(nonnull GFPRewardedAd *)rewardedAd {
...
}
광고 시청 완료
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, didComplete rewardedAd: GFPRewardedAd, with reward: GFPReward?) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager didCompleteAd:(nonnull GFPRewardedAd *)rewardedAd withReward:(nullable GFPReward *)reward {
...
}
FAN에서는 보상 정보를 알려주지 않기 때문에, reward 값이 없습니다.
광고 화면 사라질 시
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, didClose rewardedAd: GFPRewardedAd) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager didCloseAd:(nonnull GFPRewardedAd *)rewardedAd {
...
}
광고 화면 클릭 시
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, wasClickedAd rewardedAd: GFPRewardedAd) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager wasClickedAd:(nonnull GFPRewardedAd *)rewardedAd {
...
}
7.x.x대의 DFP 버전에서는 클릭 이벤트를 지원하지 않아 이벤트가 오지 않습니다.
아래 메서드들은 @optional로 선언된 메서드이므로, 필요한 경우에만 선택적으로 구현하면 됩니다.
음소거 상태 변경 시 (S2S 광고 전용)
S2S 광고에서 플레이어의 음소거 상태가 변경될 때 호출됩니다.
- Swift
- Objective-C
func rewardedAdManager(_ manager: GFPRewardedAdManager, didChangedMute isMuted: Bool) {
...
}
- (void)rewardedAdManager:(nonnull GFPRewardedAdManager *)manager didChangedMute:(BOOL)isMuted {
...
}
광고 노출(Impression) 발생 시
광고가 실제로 노출(impression)될 때 호출됩니다.
- Swift
- Objective-C
func rewardedAdManagerDidReceiveImpression(_ manager: GFPRewardedAdManager) {
...
}
- (void)rewardedAdManagerDidReceiveImpression:(nonnull GFPRewardedAdManager *)manager {
...
}
인앱 브라우저 열릴 때
광고 클릭 등으로 인앱 브라우저가 열릴 때 호출됩니다.
- Swift
- Objective-C
func rewardedAdManagerDidPresentDefaultInAppBrowser(_ manager: GFPRewardedAdManager) {
...
}
- (void)rewardedAdManagerDidPresentDefaultInAppBrowser:(nonnull GFPRewardedAdManager *)manager {
...
}
인앱 브라우저 닫힐 때
인앱 브라우저가 닫힐 때 호출됩니다.
- Swift
- Objective-C
func rewardedAdManagerDidDismissDefaultInAppBrowser(_ manager: GFPRewardedAdManager) {
...
}
- (void)rewardedAdManagerDidDismissDefaultInAppBrowser:(nonnull GFPRewardedAdManager *)manager {
...
}