6. Video Ad‎ > ‎

2) iOS

전면 광고 적용을 위해서는 Tnk 사이트에서 앱 등록 및 XCode 프로젝트 상의 SDK 관련 설정이 우선 선행되어야합니다.
[iOS Settings] 의 내용을 우선 확인해주세요.

동영상 광고는 동영상 광고를 로딩하는 과정과 로딩이 완료되면 이를 화면에 플레이하는 단계로 구성되어 있으며, 동영상 광고 로딩을 위해서는 TnkSession 객체의 prepareVideoAd: 를 호출하고 로딩된 동영상을 플레이하기 위해서는 TnkSession 객체의 showVideoAd: 를 호출합니다.

최초에 한번 prepareVideoAd: 를 호출하면 이후부터는 내부적으로 별도 Task 가 수행되면서 다음 동영상을 계속적으로 로딩합니다.

[Loading a Video Ad]

우선 앱이 실행되면 아래와 같이 prepareVideoAd: 를 호출하여 동영상 광고를 로딩합니다. 아래의 예에서 첫번째 파라메터는 Display Logic 명이며 두번째 파라메터는 동영상 광고 로딩이 완료되면 그 이벤트를 받기 위하여 사용하는 TnkVideoDelegate 객체입니다.

Prepare a Video Ad

@interface ViewController : UIViewController <TnkVideoDelegate


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    [[TnkSession sharedInstance] prepareVideoAd:@"your_display_logic_name" delegate:self];


}


@end


[TnkVideoDelegate]

동영상 광고의 로딩이 완료되거나 사용자가 동영상 광고 시청을 완료한 경우 해당 이벤트 발생시점에 필요한 로직을 구현하기 위해서 아래의 TnkVideoDelegate 프로토콜을 구현합니다.

TnkVideoDelegate Protocol

#define AD_CLOSE_SIMPLE     0

#define AD_CLOSE_CLICK      1


@protocol TnkVideoDelegate <NSObject>

@optional


// 동영상 광고가 로딩이 되는 시점에 호출됩니다.

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


// 동영상이 플레이되는 시점에 호출됩니다.

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


// 사용자가 동영상을 끝까지 시청하는 경우 호출됩니다.

// 중간 skip 가능한 동영상의 경우 사용자가 skip 하면 skipped 파라메터로 YES 전달됩니다.

- (void)didVideoCompleted:(NSString *)logicName skip:(BOOL)skipped;


// 동영상 시청 또는 동영상 시청완료 동영상 광고 화면이 닫히는 시점에 호출됩니다.

// 닫기 버튼으로 화면을 닫을 경우에는 type 파라메터로 0 전달되며, 링크 버튼을 클릭하여 닫히는 경우에는 1 전달됩니다.

- (void)didVideoClose:(NSString *)logicName close:(int)type;


// 동영상 로딩이 실패하는 경우 호출됩니다. 이 이벤트는 prepareVideAd: 호출시 repeat:NO 로 지정된 경우에만 호출됩니다.

// repeat:YES(기본값)의 경우에는 동영상 로딩이 실패하더라도 이 이벤트가 호출되지 않으며 내부적으로 일정시간 후에 다시 로딩을 진행합니다.

- (void)didVideoFail:(NSString *)logicName error:(int)errCode;

@end


[Video Ad Sample]
아래의 예시는 Listener를 사용하여 동영상 광고가 로딩되는 시점에 동영상 시청 버튼을 보여주고 사용자가 이를 클릭하면 동영상을 플레이해주는 예시입니다. 

Video Ad Sample

#import "tnksdk.h"


@interface ViewController : UIViewController <TnkVideoDelegate>


@property (nonatomic, weak) IBOutlet UIButton *videoButton;

- (IBAction)videoAdPressed:(id)sender;


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];


    self.videoButton.hidden = YES;

    [[TnkSession sharedInstance] prepareVideoAd:@"intro_video" delegate:self];

}


- (IBAction)videoAdPressed:(id)sender {

    

    if ([[TnkSession sharedInstance] hasVideoAd:@"intro_video"]) {

        // 동영상 광고를 플레이하고 플레이버튼은 숨김처리한다.

        // 플레이 버튼은 Delegate 통하여 동영상 로딩 이벤트가 발생하면 다시 보여주도록 아래에서 처리한다.

        [[TnkSession sharedInstance] showVideoAd:@"intro_video" on:self];

        

        self.videoButton.hidden = YES;

    }

    else {

        // 동영상 광고가 없습니다. 안내하기

    }

}


#pragma mark - TnkVideoDelegate


- (void) didVideoLoad:(NSString *)logicName {

    // 동영상 광고가 로딩되면 플레이 버튼을 보여준다.

    self.videoButton.hidden = NO;

}


- (void) didVideoShow:(NSString *)logicName {

    NSLog(@"### didVideoShow");

}


- (void) didVideoClose:(NSString *)logicName close:(int)type {

    NSLog(@"### didVideoClosed");

}


- (void) didVideoCompleted:(NSString *)logicName skip:(BOOL)skipped {

    NSLog(@"### didVideoCompleted");

}


@end



[세로화면 앱]

동영상 광고는 가로 모드로 화면에 플레이되기 때문에 세로화면 전용앱에서는 다음과 같이 AppDelegated 파일에 메소드를 추가합니다.

AppDelegate.m

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

{

    if ([[TnkSession sharedInstance] isVideoPresenting]) {

        return UIInterfaceOrientationMaskLandscape;

    }

    else {

        return UIInterfaceOrientationMaskPortrait;

    }

}


[Video Ad APIs]

- TnkSession - prepareVideoAd:

Method

  - (void) prepareVideoAd:(NSString *)logicName delegate:(id<TnkVideoDelegate>)delegate;

  - (void) prepareVideoAd:(NSString *)logicName delegate:(id<TnkVideoDelegate>)delegate repeat:(BOOL)repeatFlag;

Description
   동영상 광고를 로딩을 시작합니다. 로딩된 동영상 광고는 이후 showVideoAd: API를 호출하여  플레이할 수 있습니다. Display Logic 명을 지정하지 않거나 delegate 를 지정하지 않을 경우에는 해당 파라메터로 nil 값을 전달합니다.

Parameters
 파라메터 명칭 내용
 logicName 자신만의 명칭을 넣은 후 Tnk 사이트에서 원하는 형태의 광고를 띄우도록 제어할 수 있습니다. ( [Display Logic] 참고)
 delegate TnkVideoDelegate 객체
 repeatFlag 기본값은 YES 입니다. NO 로 지정하게 되면 동영상을 1회만 로딩하고 백그라운드에서 자동으로 재로딩 하지 않습니다.

- TnkSession - showVideoAd:

Method

  - (BOOL) showVideoAd:(NSString *)logicName on:(UIViewController *)viewController;


Description
   prepareVideoAd:를 통하여 로딩된 동영상 광고를 플레이합니다.

Parameters
 파라메터 명칭 내용
 logicName logicName을 지정할 경우 이전에 prepareVideoAd 호출시 지정한 logicName 과 일치하는 동영상 광고를 플레이합니다. 지정하지 않으면(nil) 먼저 로딩된 동영상 광고를 플레이합니다.
 viewController현재 UIViewController 객체를 지정합니다. 설정하지 않은 경우에는 현재 UIWindow의 rootViewController 가 사용됩니다.

- TnkSession - hasVideoAd:

Method

  - (BOOL) hasVideoAd:(NSString *)logicName;


Description
  현재 로딩된 동영상광고가 존재하는지 여부를 반환합니다.

Parameters
 파라메터 명칭 내용
 context Context 객체
 logicName logicName을 지정할 경우 해당명으로 로딩된 동영상광고의 존재여부를 반환합니다.
지정하지 않으면(nil) displayLogic과 상관없이 동영상 광고 여부를 반환합니다.

[기타]

1) 동영상 화면에서 닫기 버튼(X 버튼)을 숨기고 싶으신 경우 아래의 코드를 삽입합니다.

    [[TnkSession sharedInstance] setNoVideoClose:YES];

Comments