본문으로 건너뛰기

비디오 스케줄 매니저 적용 가이드

뷰 컨트롤러 작성

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

  1. 뷰 컨트롤러에 GFPVideoAdScheduleManager *scheduleManager 프로퍼티를 선언합니다.
  2. 뷰 컨트롤러에 GFPVideoAdScheduleManagerDelegate 프로토콜을 구현합니다.
  3. 비디오를 재생할 컨테이너 뷰 (UIView)를 준비합니다.
// MyViewController.h

@import GFPSDK;

@interface MyViewController : UIViewController <GFPVideoAdScheduleManagerDelegate>

@property (nonatomic) GFPVideoAdScheduleManager *scheduleManager;

@property (nonatomic) IBOutlet UIView *videoView; // 스토리보드의 뷰객체와 연결되어 있음을 가정
@property (nonatomic) AVPlayer *contentPlayer; // 컨텐츠가 재생되는 Player

@end

GFPVideoAdScheduleManager 생성 및 광고 요청

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

  • GFPVideoAdScheduleManager 인스턴스를 생성할 때, 발급받으신 광고 비디오 스케줄 ID, Content Player(AVPlayer), 광고를 게재할 수 있는 UIView, GFPAdScheduleParam 에서 스케줄 정보를 세팅해주세요. Content Player는 광고 재생을 위한 시간 측정에 사용됩니다.
  • GFPVideoAdScheduleManager 사용이 끝나면 destroy 메소드를 호출해야 합니다.
- (void)viewDidLoad {
[super viewDidLoad];

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

GFPVideoPlacementType type = GFPVideoPlacementTypePre | GFPVideoPlacementTypeMid | GFPVideoPlacementTypePost;
GFPAdScheduleParam *param = [[GFPAdScheduleParam alloc] initWithPlacementPolicy: type duration: CMTimeGetSeconds(Content duration) param: adParam];
param.noticeDurationSec = 5.0;
...

self.scheduleManager = [[GFPVideoAdScheduleManager alloc] initWithAdScheduleID: @"YOUR_SCHEDULE_ID"
contentPlayer: contentPlayer
videoView: videoView
scheduleParam: param];

self.scheduleManager.renderingSetting = [GFPVideoAdRenderingSetting alloc] init];

// 광고 스케줄 요청
self.scheduleManager.delegate = self;
self.scheduleManager.qoeDelegate = self;

[self.scheduleManager loadSchedule];
}

추가 설정 가능 요소들

광고 재생 문구 노출 시간

"광고 후 재생됩니다." 와 같은 광고 문구 노출 시간 설정 시 중간 광고 재생 noticeDurationSec 시간 전만큼 GFPVideoAdScheduleManagerDelegate의 showNotice 메소드가 호출됩니다.

param.noticeDurationSec = 5.0;

GFPVideoAdScheduleManagerDelegate 구현

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

스케줄 로드 성공 및 실패

스케줄 로드 성공 시

스케줄 로드에 성공하면 광고 스케줄링이 시작됩니다.

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didLoadedSchedule:(NSArray <GFPVideoAdBreak *> * _Nullable)aAdBreak {
...
}

스케줄 로드 실패 시

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didFailScheduleWithError:(GFPError *)aError {
...
}

스케줄 수행이 모두 완료된 경우

- (void)scheduleManagerDidCompleted:(GFPVideoAdScheduleManager *)aScheduleAdManager {
...
}

컨텐츠 재생 정지 관련 이벤트들

컨텐츠를 재생할 시점이 되었을 때 호출

- (void)scheduleManagerContentResumeRequest:(GFPVideoAdScheduleManager *)aScheduleAdManager {
/* 전광고가 없을 경우나 광고 재생 실패 시 컨텐츠 player 재생 */
...
}

컨텐츠 정지할 시점이 되었을 때 호출

- (void)scheduleManagerContentPauseRequest:(GFPVideoAdScheduleManager *)aScheduleAdManager {
/* 광고 재생 전 컨텐츠 player 정지 */
...
}

광고 재생 이후 발생하는 이벤트들

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

로드 혹은 재생 실패시

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didFailWithResult:(GFPVideoAdBreakResult *)aResult {
...
}

비디오 광고 로드가 되었을 때

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didLoadAd:(GFPVideoAdBreakResult *)aResult {
...
}

비디오 광고 재생이 시작될 때

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didStartAd:(GFPVideoAdBreakResult *)aResult {
...
}

비디오 광고 재생 가능 시 호출

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didStartReadyAd:(GFPVideoAdBreakResult *)aResult {
/* 광고 재생 문구 숨김 처리 후, 재생 중인 플레이어가 있다면 중지하고, 광고 영상을 재생 */
...
[self.scheduleAdManager startWith: NO or YES];
}

비디오 광고 재생이 종료 되었을 때

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didCompleteAd:(GFPVideoAdBreakResult *)aResult {
...
}

비디오 중간 광고 전 광고 재생 문구 노출 가능 시 호출

GFPAdScheduleParam의 noticeDurationSec 세팅 시 호출

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager showAdNotice:(NSInteger)aDuration {
/* "광고 후 재생됩니다" 등 의 문구 노출 */
...
}

클릭 이벤트 발생시

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager wasClicked:(GFPVideoAdBreakResult *)aResult {
...
}

광고 재생플레이어가 AVPlayer인 경우 로그 이벤트 발생 시

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager
didReceiveAccessLogEvents:(NSArray<AVPlayerItemAccessLogEvent *> *)accessLogEvents {
...
}

Remind(NonLinear) 광고 관련 이벤트들

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

Remind 광고가 사라지면 호출

호출 상황 : Duration 시간이 지난 이후, 가로 세로 화면 전환시, Close 버튼 클릭 시.

- (void)nonLinearDidHide:(GFPRemindType)type {
...
}

Remind 광고 클릭시 호출

- (void)nonLinearWasClicked:(GFPRemindType)type {
...
}

Remind 광고가 사용자에게 보여질 경우 호출

- (void)nonLinearOnActiveImpression:(GFPRemindType)type {
...
}

동영상 광고 UI 모드 설정

서비스의 동영상 모드에 따라 displayMode를 설정해줍니다.

  • 일반 모드

샘플 이미지 샘플 이미지

self.scheduleManager.displayMode = [GFPVideoDisplayMode normal];
  • PIP 모드

샘플 이미지 샘플 이미지

self.scheduleManager.displayMode = [GFPVideoDisplayMode pip];

PIP 전용 콜백

콜백 등록

GFPVideoAdScheduleManagerPIPDelegate 을 conform 하는 pipDelegate를 scheduleManager에 등록합니다.

닫기 버튼 클릭 알림

GFPVideoAdScheduleManagerPIPDelegate의 scheduleManager:didTappedCloseBtnInPIP: 을 통해 상단의 닫기 버튼 클릭을 알립니다.

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didTappedCloseBtnInPIP:(GFPVideoAdBreakResult *)aResult {

}

리턴 버튼 클릭 알림

GFPVideoAdScheduleManagerPIPDelegate의 scheduleManager:didTappedReturnBtnInPIP: 을 통해 상단의 리턴 버튼 클릭을 알립니다.

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didTappedReturnBtnInPIP:(GFPVideoAdBreakResult *)aResult {

}

ControlView 콜백

콜백 등록

GFPVideoAdScheduleManagerDelegate 을 conform 하는 delegate를 scheduleManager에 등록합니다.

ControlView 노출 전 알림

GFPVideoAdScheduleManagerDelegate의 scheduleManager:playControlWillShow: 을 통해 컨트롤뷰의 Show 애니메이션 시작을 알립니다.

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager playControlWillShow:(NSTimeInterval)duration {

}

ControlView 숨김 전 알림

GFPVideoAdScheduleManagerDelegate의 scheduleManager:playControlHideShow: 을 통해 컨트롤뷰의 Hide 애니메이션 시작을 알립니다.

- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager playControlWillHide:(NSTimeInterval)duration {

}

기타

컨텐츠 플레이어 컴포넌트 노출 여부에 따른 광고UI 제어

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

광고의 Overlay(Seekbar, Pause, Resume, 선거 광고, 후광고 Text) 영역 노출

  • (void)showOverlayView;

광고의 Overlay(Seekbar, Pause, Resume, 선거 광고, 후광고 Text) 영역 감춤

  • (void)hideOverlayView;

RemindAd(Banner, Text) 광고 노출

  • (void)showRemindAd;

RemindAd(Banner, Text) 광고 감춤

  • (void)hideRemindAd;

SMR용 리마인드 텍스트광고 노출 및 Custom 설정

해당 Custom은 GFPTextAdViewAttribute 클래스를 통해 가능합니다.

GFPTextAdViewAttribute *attribute = [[GFPTextAdViewAttribute alloc] initWithContainer: aContainer];
attribute.backgroundColor = [UIColor yellowColor];
attribute.textColor = [UIColor redColor];
attribute.verticalBarColor = [UIColor cyanColor];
attribute.closeIcon = [UIImage imageNamed: @"close"];
attribute.moreIcon = [UIImage imageNamed: @"more"];
  • container
    • 리마인드 Text 광고 영역 컨테이너 영역입니다. (디바이스 세로 모드일 때, 가로일 경우는 SDK 내부에서 처리합니다.)
    • nil일 경우 세로 모드에서 리마인드 Text가 노출되지 않습니다.
  • backgroundColor
    • 리마인드 Text의 Default background color가 아닌 background color를 지정할 수 있습니다.
  • textColor
    • 리마인드 Text의 Default test color가 아닌 text color를 지정할 수 있습니다.
  • verticalBarColor
    • 리마인드 Text의 Default verticlabar color가 아닌 verticalBar color를 지정할 수 있습니다.
  • closeIcon
    • 리마인드 Text의 Default close Icon이 아닌 close Icon을 지정할 수 있습니다.
  • moreIcon
    • 리마인드 Text의 Default more Icon이 아닌 more Icon을 지정할 수 있습니다.

NonLinear Outer Container 변경

GFPVideoAdScheduleManager의 replaceTextAdViewAttribute: 메서드를 통해서 변경된 textAdViewAttribute를 전달할 수 있습니다.

- (void)replaceTextAdViewAttribute:(GFPTextAdViewAttribute *)textAdViewAttribute {

}