2) iOS

아래 API 호출을 위해서는 우선 TnkAd SDK 관련 설정이 필요합니다.

[iOS Settings] 내용을 우선 확인해 주세요.

- 2015.05.19 : SDK v4.0 부터 전면광고 용 API가 아래와 같이 변경되었습니다. 구 API는 계속 제공되지만 기능 업데이트는 더 이상 되지 않으므로 꼭 새로운 API를 적용해주시기 바랍니다.

[TnkInterstitialAd 객체]

전면광고를 띄우는 작업은 1) TnkInterstitialAd 객체 생성, 2) prepare 호출 3) show 호출 의 3단계를 통해서 이루어 집니다. 아래는 비보상 전면 광고를 띄우기 위한 가장 간단한 예제입니다.

TnkInterstitialAd

@implementation ViewController {

TnkInterstitialAd *tnkInterstitial;

}

- (void)viewDidLoad {

[super viewDidLoad];

// 1) 전면광고 용 객체 생성

tnkInterstitial = [[TnkInterstitialAd alloc] init];

// 2) 전면광고 요청

[tnkInterstitial prepare];

// 3) 전면광고 화면의 띄우기

[tnkInterstitial show];

}

만약 보상형 전면광고를 띄우고자 할 경우에는 prepare 호출시 TNK_PPI 파라메터를 전달하시면 됩니다.

Incentive Ad Sample

@implementation ViewController {

TnkInterstitialAd *tnkInterstitial;

}

- (void)viewDidLoad {

[super viewDidLoad];

// 1) 전면광고 용 객체 생성

tnkInterstitial = [[TnkInterstitialAd alloc] init];

// 2) 전면광고 요청 (보상형 전면광고)

[tnkInterstitial prepare:TNK_PPI];

// 3) 전면광고 화면의 띄우기

[tnkInterstitial show];

}

[Display Logic]

보상형 또는 비보상형 전면 광고를 앱 내에 고정하여 코딩하시는 경우 해당 전면광고를 제어할 수 있는 방법이 없으므로 보다 효과적으로 관리하기 위하여 Display Logic을 사용하실 것을 권장합니다. Display Logic 을 사용하시려면 로직 명칭을 prepare 호출시 파라메터로 전달합니다.

Display Logic을 사용하시면 전면 광고 노출기간, 빈도수, 광고의 종류 등을 자유롭게 제어하실 수 있습니다. 또한 타사와 크로스 광고를 진행하시고자 할 경우에는 Display Logic을 반드시 적용하여야 합니다. 자세한 내용은 5) Display Logic 을 참고하세요.

Display Logic Sample

@implementation ViewController {

TnkInterstitialAd *tnkInterstitial;

}

- (void)viewDidLoad {

[super viewDidLoad];

// 1) 전면광고 용 객체 생성

tnkInterstitial = [[TnkInterstitialAd alloc] init];

// 2) 전면광고 요청 (Display Logic 지정)

[tnkInterstitial prepare:@"cross_first"];

// 3) 전면광고 화면의 띄우기

[tnkInterstitial show];

}

[Delegate 이용하기]

전면광고의 로딩이 완료되거나 사용자가 전면광고 화면을 닫는 경우 해당 이벤트 발생시점에 필요한 로직을 구현하기 위해서

아래의 TnkInterstitialDelegate 프로토콜을 이용할 수 있습니다.

TnkInterstitialDelegate protocol

// Interstitial TnkAdViewDelegate 관련 상수값 정의

#define AD_CLOSE_SIMPLE 0 // 사용자가 닫기버튼을 눌러서 광고화면을 닫은 경우

#define AD_CLOSE_CLICK 1 // 사용자가 광고를 클릭해서 화면이 닫히는 경우

#define AD_FAIL_NO_AD -1 // no ad available

#define AD_FAIL_NO_IMAGE -2 // ad image not available

#define AD_FAIL_TIMEOUT -3 // ad arrived after 5 secs.

#define AD_FAIL_CANCEL -4 // ad frequency settings

#define AD_FAIL_NOT_PREPARED -5 // not prepared

#define AD_FAIL_SYSTEM -9

#define TNK_PPI @"__tnk_ppi__"

#define TNK_CPC @"__tnk_cpc__"

@protocol TnkInterstitialDelegate <NSObject>

@optional

// 전면광고 화면 닫힐 호출됩니다. 해당 객체와 화면이 닫히는 이유를 파라메터로 전달해 줍니다.

- (void)didInterstitialClose:(TnkInterstitialAd *)ad close:(int)type;

// 전면 광고를 화면에 띄우지 못했을 경우 호출됩니다.

// 시스템 오류나 광고가 없어서 광고를 띄우지 못했을 경우,

// 광고가 늦게 도착하여 광고가 뜨지 않은 경우 등 해당 사유가 파라메터로 전달됩니다.

- (void)didInterstitialFail:(TnkInterstitialAd *)ad error:(int)errCode;

// 전면광고 화면이 나타나는 시점에 호출됩니다.

- (void)didInterstitialShow:(TnkInterstitialAd *)ad;

// 전면 광고 prepare: API 호출 후 show: API 호출 전에 광고가 도착하면 호출됩니다.

// 만약 광고 도착 전에 show: API 가 먼저 호출된 경우에는 나중에 광고가 도착하였을 때

// 바로 광고가 표시되고 didInterstitialShow:가 호출됩니다.

- (void)didInterstitialLoad:(TnkInterstitialAd *)ad;

@end

TnkInterstitialDelegate는 prepare 호출시 두번째 파라미터로 지정하거나 TnkInterstitialAd 객체에 별도로 지정할 수 있습니다.

아래의 예시는 TnkInterstitialDelegate를 사용하여 광고가 로딩되는 시점에 앱의 상태를 판단하여 광고를 띄울지 말지 결정하는 방식의 구현 예시입니다.

TnkAdViewDelegate Sample

#import "tnksdk.h"

@interface ViewController : UIViewController <TnkInterstitialDelegate> {

// ...

}

@end

@implementation ViewController {

TnkInterstitialAd *tnkInterstitial;

}

- (void)viewDidLoad {

[super viewDidLoad];

// 1) 전면광고 용 객체 생성

tnkInterstitial = [[TnkInterstitialAd alloc] init];

// 2) 전면광고 요청 (Delegate 지정하여 호출함)

[tnkInterstitial prepare:@"cross_first" delegate:self];

}

#pragma mark - TnkInterstitialDelegate

- (void) didInterstitialLoad:(TnkInterstitialAd *)ad {

NSLog(@"Interstitial Loaded : %@", ad.logicName);

if (okToShow) {

// 전면광고를 화면에 띄운다.

[ad show];

}

}

[TnkInterstitialAd Interface]

TnkInterstitialAd Interface

@interface TnkInterstitialAd : NSObject <TnkServiceCallback>

@property (nonatomic, weak) UIViewController *viewControllerToShow;

@property (nonatomic, weak) id<TnkInterstitialDelegate> delegate;

@property (nonatomic, strong) NSString *logicName;

@property (nonatomic, assign) NSTimeInterval timeoutSec;

- (void) prepare;

- (void) prepare:(NSString *)logicName;

- (void) prepare:(NSString *)logicName delegate:(id<TnkInterstitialDelegate>) delegate;

- (void) show:(UIViewController *)viewController;

- (void) show;

@end

- properties

- prepare

Method

- (void) prepare

- (void) prepare:(NSString *)logicName

- (void) prepare:(NSString *)logicName delegate:(id<TnkInterstitialDelegate>)delegate

Description

전면광고를 서버에서 한건 로딩합니다. logicName 과 delegate 파라메터는 properties에 설명된 것과 같습니다.

  • 전면광고가 로딩이 완료되면 delegate의 didInterstitialLoad: 가 호출되며

  • 로딩이 실패하면 didInterstitialFail:error: 가 호출됩니다.

  • 만약에 prepare 를 호출하고 로딩된 광고가 화면에 표시되기 전에 다시 prepare 를 호출하면 그 prepare는 무시됩니다.

- show

Method

- (void) show

- (void) show:(UIViewController *)viewController

Description

prepare 를 호출하여 로딩된 전면광고를 화면에 띄웁니다. viewController를 지정하면 viewController.view 에 전면광고를 띄우며, 지정하지 않은 경우에는 현재 UIWindow 를 이용하여 내부적으로 viewController 객체를 판단하여 띄웁니다.

  • 전면광고가 화면에 나타나면 delegate의 didIntersititalShow: 가 호출되며,

  • 전면광고가 닫히게 되면 didInterstitialClose:type: 이 호출됩니다. 이때 사용자가 닫기버튼을 클릭하여 닫혔는지(0, AD_CLOSE_SIMPLE) 또는 전면광고를 클릭하여 닫혔는지(1, AD_CLOSE_CLICK) 여부가 type 파라메터로 전달됩니다.

  • 만약 이전에 prepare 를 호출하지 않은 상태에서 show를 호출하게되면 didInterstitialFail:error: 가 호출되며 errorCode는 -5(AD_FAIL_NOT_PREPARED) 가 전달됩니다.

  • 또한 설정된 전면광고 노출 간격 시간 이내에 show가 호출되면 didInterstitialFail:error: 가 호출되며 이때 errorCode 는 -4 (AD_FAIL_CANCEL) 가 전달됩니다.

[화면 Orientation 처리]

화면의 방향을 세로 또는 가로로 고정하지 않은 경우 전면광고 노출된 상태에서 화면이 회전하게 되면 전면광고가 닫히도록 아래와 같이 코딩을 하셔야합니다.

화면 Orientation 처리

// for iOS 5,6,7

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

[[TnkSession sharedInstance] removeCurrentInterstitialAd];

// 또는 아래와 같이 호출 (show 호출 방식에 맞추어 호출합니다.)

// [[TnkSession sharedInstance] removeCurrentInterstitialAd:self];

}

// for iOS 8,9

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {

[[TnkSession sharedInstance] removeCurrentInterstitialAd];

// 또는 아래와 같이 호출 (show 호출 방식에 맞추어 호출합니다.)

// [[TnkSession sharedInstance] removeCurrentInterstitialAd:self];

}