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

 Property 내용
 logicName전면광고를 가져오기 위한 Display Logic 명칭을 설정합니다. Display Logic 을 지정하면 Tnk 사이트에서 원하는 형태의 광고를 띄우도록 제어할 수 있습니다. ( [Display Logic] 참고)
Display Logic을 사용하지 않는 경우 보상형 광고의 경우에는 TNK_PPI, 비보상형 광고의 경우에는 TNK_CPC (기본값) 를 넣어줍니다.
 delegate TnkInterstitialDelegate 객체를 지정합니다.
 viewControllerToShow 전면광고를 노출할 UIViewController 객체를 지정합니다. 설정하지 않은 경우에는 현재 UIWindow의 rootViewController 를 사용합니다.
 timeoutSec 전면광고 로딩의 timeout 값을 지정합니다. (기본 5초) show 가 호출된 후 지정한 timeoutSec 이내에 광고가 로딩되지 않는 경우에는 TnkInterstitialDelegate의 didInterstitialFail:error: 가 호출됩니다. 이때 errorCode 는 -3 (AD_FAIL_TIMEOUT) 가 전달됩니다.

- 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 sharedInstanceremoveCurrentInterstitialAd];
    // 또는 아래와 같이 호출 (show 호출 방식에 맞추어 호출합니다.)
    // [[TnkSession sharedInstance] removeCurrentInterstitialAd:self];
}

// for iOS 8,9
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [[TnkSession sharedInstanceremoveCurrentInterstitialAd];
    // 또는 아래와 같이 호출 (show 호출 방식에 맞추어 호출합니다.)
    // [[TnkSession sharedInstance] removeCurrentInterstitialAd:self];
}
 
하위 페이지 (1): 구 API 가이드
Comments