본문으로 건너뛰기

튜토리얼 및 적용 가이드

NAMSDK Import

SDK 모듈을 import 합니다.

@import GFPSDK;

배너 광고 제공자 초기화

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

  • GFPBannerProviderOptionDFP : 구글 DFP 배너 광고
  • GFPBannerProviderOptionNDA : 네이버 디스플레이 배너 광고
  • GFPBannerProviderOptionInMobi : 인모비 배너 광고
  • GFPBannerProviderOptionFAN : 페이스북 배너 광고
// DFP, NDA, Inmobi, Facebook 배너 광고를 연동하려는 경우 cocoapods 의존성 추가.
[GFPAdManager setupWithPublisherCd:@"publisherCd" completionHandler:^(GFPError * _Nullable error) {
NSLog(@"Setup ERROR: %@", error);
}];

뷰 컨트롤러 작성

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

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

GFPAdLoaderDelegate는 배너 (및 네이티브) 광고 로드 관련 이벤트를, GFPBannerViewDelegate 로드된 배너 객체의 노출, 클릭, 렌더링 에러등의 이벤트를 전달합니다.

// MyViewController.h

@import GFPSDK;

@interface MyViewController : UIViewController <GFPAdLoaderDelegate, GFPBannerViewDelegate>

@property (nonatomic) GFPAdLoader *adLoader;
@property (nonatomic) GFPBannerView *bannerView;

@end

GFPAdLoader 생성 및 광고 요청

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

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

GFPAdParam *adParam = [[GFPAdParam alloc] init];
adParam.yearOfBirth = 1990;
adParam.gender = GFPAdParamGenderTypeMale;
...

self.adLoader = [[GFPAdLoader alloc] initWithUnitID:@"UnitId"
rootViewController:self
adParam:adParam];

GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.layoutType = GFPBannerViewLayoutTypeFluidWidth;
[self.adLoader setBannerDelegate:self bannerOptions:bannerOptions];

// 광고 요청
self.adLoader.delegate = self;
[self.adLoader loadAd];
}

배너 광고 요청 성공 시 GFPAdLoaderDelegate의 adLoader:didReceiveBannerAd: 메소드가 호출됩니다. GFPBannerView는 일반적인 뷰 객체(UIView)이므로, 뷰 계층구조에 포함될 수 있습니다.

추가 설정 가능 요소들

광고 렌더링 타입 (기본값 GFPDisplayAgentTypeInApp)

광고 클릭 시, Safari로 이동, In-App 이동, Scheme을 통한 이동을 지원하는 설정입니다.
광고 Banner, Native, Video 옵션 설정 후 세팅해 주시면 됩니다.

Scheme Type 설정 후 아래 AppScheme 해당하는 String 값을 설정해 주시면 됩니다.

// Safari로 이동 옵션.
GFPRenderDisplayAgent *displayAgent = [[GFPRenderDisplayAgent alloc] initWithType: GFPDisplayAgentTypeNativeSafari];
[GFPAdManager adConfiguration].displayAgent = displayAgent;

// 별도의 App scheme 설정 옵션.
GFPRenderDisplayAgent *displayAgent = [[GFPRenderDisplayAgent alloc] initWithType: GFPDisplayAgentTypeScheme scheme: @"AppScheme"];
[GFPAdManager adConfiguration].displayAgent = displayAgent;

광고 요청 타임아웃 (기본값 60초)

광고요청 이후 지정한 시간(초)경과 까지 광고 응답을 얻지 못하면 기존 요청이 무효화되며, GFPAdLoaderDelegate의 adLoader:didFailWithError:responseInfo: 메소드가 호출됩니다.

self.adLoader.requestTimeoutInterval = ...

네이티브 광고 동시 로드

배너 광고를 로드할때, 배너 또는 네이티브 광고 중 하나를 응답받을 수 있도록 설정할 수 있습니다.

GFPAdNativeOptions *nativeOptions = [[GFPAdNativeOptions alloc] init];
nativeOptions.renderingSetting = ...; // 로드될 네이티브 일반형 광고 렌더링 설정
[self.adLoader setNativeDelegate:self nativeOptions:nativeOptions];

GFPAdNativeSimpleOptions *nativeSimpleOptions = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOptions.simpleAdRenderingSetting = ...; // 로드될 네이티브 심플형 광고 렌더링 설정
[self.adLoader setNativeSimpleDelegate:self nativeSimpleOptions:nativeSimpleOptions];

self.adLoader.delegate = self;
[self.adLoader loadAd];

네이티브 일반형 광고가 로드된 경우, GFPAdLoaderDelegate의 adLoader:didReceiveNativeAd: 메서드가 호출됩니다. 네이티브 심플형 광고가 로드된 경우, GFPAdLoaderDelegate의 adLoader:didReceiveNativeSimpleAd: 메서드가 호출됩니다.

배너 레이아웃 타입 설정

레이아웃을 설정하지 않은 경우 기본 값은 고정형(GFPBannerViewLayoutTypeFixed) 입니다.

  • GFPBannerView.adSize 를 통해 광고 소재의 사이즈 정보를 얻으실 수 있습니다.
  • 고정형을 제외한 레이아웃 타입(=확장형)을 설정할 경우, 가로 확장형 레이아웃 설정을 권장합니다.
고정형 레이아웃 설정 (Fixed)
  • 서비스에서 설정한 광고 컨테이너 크기에 관계 없이 광고 영역의 크기가 고정된 형태입니다.
GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.layoutType = GFPBannerViewLayoutTypeFixed;
가로 확장형 레이아웃 설정 (FluidWidth)
  • 배너광고의 가로 폭을 직접 설정할 수 있습니다.
GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.layoutType = GFPBannerViewLayoutTypeFluidWidth;
  • 가로 확장형으로 레이아웃 타입을 설정하여 광고를 요청하고, 광고 요청 성공 시 응답으로 받은 GFPBannerView의 가로 크기를 원하는 크기로 조절합니다.
self.bannerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.bannerView.widthAnchor constraintEqualToConstant:SUPERVIEW_SIZE.width].active = YES;
/*
원하는 가로 크기만큼 bannerView frame 세팅.
*/
CGRect frame = CGRectMake(/*원하는 X 좌표*/, /*원하는 Y 좌표*/, /*원하는 가로 크기*/, /*원하는 세로 크기*/);
[self.bannerView setFrame: frame];
  • 가로 확장이 지원되는 광고가 로드된 경우 지정하신 GFPBannerView의 가로 크기에 맞게 꽉 채워지도록 광고가 그려지고, 고정형 광고가 로드된 경우 가로 양쪽에 남는 크기는 여백으로(가운데 정렬됨) 그려집니다.
세로 확장형 레이아웃 설정 (FluidHeight)
  • 세로 확장형으로 레이아웃 타입을 설정하여, 배너 광고의 세로 폭을 직접 설정할 수 있습니다.
GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.layoutType = GFPBannerViewLayoutTypeFluidHeight;
확장형 레이아웃 설정 (Fluid)
  • 확장형으로 레이아웃 타입을 설정하여, 배너 광고의 가로/세로 폭을 직접 설정할 수 있습니다.
GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.layoutType = GFPBannerViewLayoutTypeFluid;

광고 전달 데이터 설정

hostMeta(매채와 광고간의 약속된 데이터)를 설정하여 광고 소재에 필요한 데이터를 전달합니다. hostMeta의 Key/Value는 모두 문자열 타입입니다.

hostMeta를 이용하여 광고 스타일을 설정할 수 있습니다. InterfaceStyle 전역 설정과 별개로, 특정 화면에서 UI 모드가 다를 때 개별 설정을 통해 아이콘 스타일을 맞출 수 있습니다. '광고 별 설정 > 전역 설정'의 우선 순위에 따라 적용되며, 광고 별 style 설정이 없을 경우 전역 설정을 따라갑니다.

//example
GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.hostMeta = [NSDictionary dictionaryWithObjectsAndKeys:@"light", @"theme", nil];
bannerOptions.hostMeta = [NSDictionary dictionaryWithObjectsAndKeys:@"dark", @"theme", nil];
bannerOptions.hostMeta = [NSDictionary dictionaryWithObjectsAndKeys:@"system", @"theme", nil]; // 아이폰 설정의 style을 따라갑니다.

GFPAdLoaderDelegate 구현

GFPAdLoaderDelegate를 구현하시면, 해당 메서드를 통해 광고 로드 관련 이벤트를 받으실 수 있습니다.

로드 성공 및 실패

배너 로드 성공시

배너 광고 로드가 성공하면, 광고를 원하는 위치에 게제하고, 필요한 경우 적절하게 constraint를 설정합니다.

- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveBannerAd:(GFPBannerView *)bannerView {
[self.view addSubview:bannerView];
// constraint 설정
...
}

로드 실패시

- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didFailWithError:(GFPError *)error responseInfo:(GFPLoadResponseInfo *)responseInfo {
// ...
}

네이티브 광고 로드 성공시

GFPAdLoader에 nativeSimpleOption 혹은 nativeOption을 설정한 경우인 경우, 배너 혹은 네이티브 광고가 내려올 수 있습니다.

GFPBannerViewDelegate 구현

GFPBannerViewDelegate를 구현하시면, 해당 메서드를 통해 이벤트를 받으실 수 있습니다.

MRAID 3.0 적용 시 소재에서 Unload 호출 시

MRAID 3.0 에서 추가된 스펙인 Unload 호출 시 호출되는 메서드로, 메서드 이후에 GFPBannerView의 내부 광고 뷰는 모두 제거됩니다.

- (void)bannerShouldUnload:(GFPBannerView *)bannerView{
// ...
}

로드 이후 발생되는 이벤트

자세한 내용은 GFPBannerViewDelegate.h 파일을 참고해 주세요.

광고 노출 이벤트 발생시

- (void)bannerAdWasSeen:(GFPBannerView *)bannerView {
...
}

클릭 이벤트 발생시

- (void)bannerAdWasClicked:(GFPBannerView *)bannerView {
...
}

광고 사이즈 변경 시

광고 소재에 의해 사이즈 변경 시 호출됩니다.

광고 사이즈가 변경시 호출되었을 때 먼저 GFPBannerSizeType을 통해 Fixed인지 Fluid인지 판단하여 Fluid라면 원하는 사이즈로 변경이 가능합니다. (GFPBannerAdSize.h 파일 참조)

  • FluidWidth 일 경우 size.width = -1 이므로 원하는 Width 값 변경 필요.
  • FluidHeight 일 경우 size.height = -1 이므로 원하는 Height 값 변경 필요.
  • Fluid 일 경우 size.width = -1, size.height = -1 이므로 원하는 Width, Height 값 변경 필요.
- (void)bannerView:(GFPBannerView *)bannerView didChangeWith:(GFPBannerAdSize *)size {
...
}

광고 Meta 데이터 변경 시

광고 소재에 의해 광고 Meta 데이터 변경 시 호출됩니다.

- (void)bannerView:(GFPBannerView *)bannerView didChangeAdMeta:(NSDictionary <NSString *, NSString *>*)adMeta {
...
//adMeta example: { 'bgcolor':'#000000', 'fontcolor':'#FFFFFF' };
}

광고가 사용자에 의해 Mute 되었을 때

광고가 Mute 되었을 때, 서비스에 콜백을 통해 Mute 를 알립니다. Mute 후 GFPSDK에서는 "이 광고는 더 이상 보이지 않습니다." 라는 화면을 노출하고 있으며, 서비스의 정책에 따라 광고를 화면에서 없앨 지/그대로 노출할 지를 정합니다.

- (void)bannerAdWasMuted:(GFPBannerView *)bannerView {

}