시작하기
배너 광고는 앱에 레이아웃 내에 표시되는 직사각형 이미지 형태의 광고로서 WebView 로 구현된 광고형태입니다.
선행 챕터
NAMSDK Import
SDK 모듈을 import 합니다.
- Swift
- Objective-C
import GFPSDK
@import GFPSDK;
배너 광고 제공자 초기화
연동할 배너광고 제공자의 Pod이 프로젝트에 추가된 상태에서 GFPAdManager를 통해 초기화 합니다. (앱이 구동되는 시점에 한번만 수행)
- GFPBannerProviderOptionDFP : 구글 DFP 배너 광고
- GFPBannerProviderOptionNDA : 네이버 디스플레이 배너 광고
- GFPBannerProviderOptionInMobi : 인모비 배너 광고
- GFPBannerProviderOptionFAN : 페이스북 배너 광고
- Swift
- Objective-C
// DFP, NDA, Inmobi, 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);
}];
뷰 컨트롤러 작성
뷰 컨트롤러(MyViewController)를 만들고, 헤더파일(MyViewController.h)에 아래 작업을 수행합니다.
- 뷰 컨트롤러에 GFPAdLoader *adLoader 프로퍼티를 선언합니다.
- 뷰 컨트롤러에 GFPAdLoaderDelegate 프로토콜을 구현합니다.
- 뷰 컨트롤러에 GFPBannerView *bannerView 프로퍼티를 선언합니다.
- 뷰 컨트롤러에 GFPBannerViewDelegate 프로토콜을 구현합니다.
GFPAdLoaderDelegate는 배너 (및 네이티브) 광고 로드 관련 이벤트를, GFPBannerViewDelegate 로드된 배너 객체의 노출, 클릭, 렌더링 에러등의 이벤트를 전달합니다.
- Swift
- Objective-C
// MyViewController.h
import GFPSDK
class MyViewController : UIViewController, GFPAdLoaderDelegate, GFPBannerViewDelegate {
private var adLoader : GFPAdLoader?
private var bannerView : GFPBannerView?
}
// 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은 광고 효과를 높이기 위한 타게팅에 사용됩니다.
- Swift
- Objective-C
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)
self.adLoader?.delegate = self
self.adLoader?.loadAd()
}
- (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)이므로, 뷰 계층구조에 포함될 수 있습니다.
GFPAdLoaderDelegate 구현
GFPAdLoaderDelegate를 구현하시면, 해당 메서드를 통해 광고 로드 관련 이벤트를 받으실 수 있습니다.
로드 성공 및 실패
배너 로드 성공시
배너 광고 로드가 성공하면, 광고를 원하는 위치에 게제하고, 필요한 경우 적절하게 constraint를 설정합니다.
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader!, didReceiveBannerAd bannerView: GFPBannerView!) {
self.view.addSubview(bannerView)
// constraint 설정
...
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveBannerAd:(GFPBannerView *)bannerView {
[self.view addSubview:bannerView];
// constraint 설정
...
}
로드 실패시
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader!, didFailWithError error: GFPError!, responseInfo: GFPLoadResponseInfo!) {
// ...
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didFailWithError:(GFPError *)error responseInfo:(GFPLoadResponseInfo *)responseInfo {
// ...
}
네이티브 광고 로드 성공시
GFPAdLoader에 nativeSimpleOption
혹은 nativeOption
을 설정한 경우인 경우, 배너 혹은 네이티브 광고가 내려올 수 있습니다.
GFPBannerViewDelegate 구현
GFPBannerViewDelegate를 구현하시면, 해당 메서드를 통해 이벤트를 받으실 수 있습니다.
MRAID 3.0 적용 시 소재에서 Unload 호출 시
MRAID 3.0 에서 추가된 스펙인 Unload 호출 시 호출되는 메서드로, 메서드 이후에 GFPBannerView의 내부 광고 뷰는 모두 제거됩니다.
- Swift
- Objective-C
func bannerShouldUnload(_ bannerView: GFPBannerView) {
// ...
}
- (void)bannerShouldUnload:(GFPBannerView *)bannerView{
// ...
}
로드 이후 발생되는 이벤트
자세한 내용은 GFPBannerViewDelegate.h 파일을 참고해 주세요.
광고 노출 이벤트 발생시
- Swift
- Objective-C
func bannerAdWasSeen(_ bannerView: GFPBannerView) {
...
}
- (void)bannerAdWasSeen:(GFPBannerView *)bannerView {
...
}
광고 rendered 이벤트 발생시
- Swift
- Objective-C
func bannerAdWasRendered(_ bannerView: GFPBannerView) {
...
}
- (void)bannerAdWasRendered:(GFPBannerView *)bannerView {
...
}
클릭 이벤트 발생시
- Swift
- Objective-C
func bannerAdWasClicked(_ bannerView: GFPBannerView) {
...
}
- (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 값 변경 필요.
- Swift
- Objective-C
func bannerView(_ bannerView: GFPBannerView, didChangeWith size: GFPBannerAdSize) {
...
}
- (void)bannerView:(GFPBannerView *)bannerView didChangeWith:(GFPBannerAdSize *)size {
...
}
광고 Meta 데이터 변경 시
광고 소재에 의해 광고 Meta 데이터 변경 시 호출됩니다.
- Swift
- Objective-C
func bannerView(_ bannerView: GFPBannerView, didChangeAdMeta adMeta: [String : String]) {
...
//adMeta example: ["bgcolor":"#000000", "fontcolor":"#FFFFFF"]
}
- (void)bannerView:(GFPBannerView *)bannerView didChangeAdMeta:(NSDictionary <NSString *, NSString *>*)adMeta {
...
//adMeta example: { 'bgcolor':'#000000', 'fontcolor':'#FFFFFF' };
}
광고가 사용자에 의해 Mute 되었을 때
광고가 Mute 되었을 때, 서비스에 콜백을 통해 Mute 를 알립니다. Mute 후 GFPSDK에서는 "이 광고는 더 이상 보이지 않습니다." 라는 화면을 노출하고 있으며, 서비스의 정책에 따라 광고를 화면에서 없앨 지/그대로 노출할 지를 정합니다.
- Swift
- Objective-C
func bannerAdWasMuted(_ bannerView: GFPBannerView) {
}
- (void)bannerAdWasMuted:(GFPBannerView *)bannerView {
}