시작하기
GFP SDK 에서는 인스트림 동영상 광고를 표시할 수 있게 도와줍니다.
선행 챕터
NAMSDK Import
SDK 모듈을 import 합니다.
- Swift
- Objective-C
import GFPSDK
@import GFPSDK;
비디오 광고 제공자 세팅
- GFPVideoProviderOptionNDA : 네이버 디스플레이 비디오 광고
- Swift
- Objective-C
// IMA와 NDA 비디오 광고를 연동하려는 경우 cocoapods 의존성 추가.
GFPAdManager.setup(withPublisherCd: "publisherCd") { (error : GFPError?) in
print("Setup Eror: \(String(describing: error?.description))")
}
// IMA와 NDA 비디오 광고를 연동하려는 경우 cocoapods 의존성 추가.
[GFPAdManager setupWithPublisherCd:@"publisherCd" completionHandler:^(GFPError * _Nullable error) {
NSLog(@"Setup ERROR: %@", error);
}];
비디오 광고 매니저 타입
- 전/중/후 광고의 스케줄링 지원을 위한 GFPVideoAdScheduleManager를 제공합니다.
뷰 컨트롤러 작성
뷰 컨트롤러(MyViewController)를 만들고, 헤더파일(MyViewController.h)에 아래 작업을 수행합니다.
- 뷰 컨트롤러에 GFPVideoAdScheduleManager *scheduleManager 프로퍼티를 선언합니다.
- 뷰 컨트롤러에 GFPVideoAdScheduleManagerDelegate 프로토콜을 구현합니다.
- 비디오를 재생할 컨테이너 뷰 (UIView)를 준비합니다.
- Swift
- Objective-C
// MyViewController.h
import GFPSDK
class MyViewController : UIViewController, GFPVideoAdScheduleManagerDelegate {
var scheduleManager : GFPVideoAdScheduleManager?
@IBOutlet var videoView : UIView! // 스토리보드의 뷰객체와 연결되어 있음을 가정
var contentPlayer : AVPlayer? // 컨텐츠가 재생되는 Player
}
// 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 메소드를 호출해야 합니다.
- Swift
- Objective-C
override func viewDidLoad() {
super.viewDidLoad()
let adParam = GFPAdParam()
adParam.yearOfBirth = 1990
adParam.gender = .male
...
let scheduleParam = GFPAdScheduleParam(placementPolicy: .full, duration: CMTimeGetSeconds(self.duration!), param: adParam)
scheduleParam.noticeDurationSec = 5.0
self.scheduleManager = GFPVideoAdScheduleManager(adScheduleID: "YOUR_SCHEDULE_ID", contentPlayer: contentPlayer, videoView: videoView, scheduleParam: scheduleParam)
self.scheduleManager?.renderingSetting = GFPVideoAdRenderingSetting()
// 광고 스케줄 요청
self.scheduleManager?.delegate = self
self.scheduleManager?.qoeDelegate = self
self.scheduleManager?.loadSchedule()
}
- (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];
}
GFPVideoAdScheduleManagerDelegate 구현
GFPVideoAdScheduleManagerDelegate를 구현하시면, 해당 메서드를 통해 이벤트를 받으실 수 있습니다.
스케줄 로드 성공 및 실패
스케줄 로드 성공 시
스케줄 로드에 성공하면 광고 스케줄링이 시작됩니다.
- Swift
- Objective-C
func scheduleManager(_ aScheduleAdManager: GFPVideoAdScheduleManager, didLoadedSchedule aAdBreak: [GFPVideoAdBreak]?) {
...
}
- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didLoadedSchedule:(NSArray <GFPVideoAdBreak *> * _Nullable)aAdBreak {
...
}
스케줄 로드 실패 시
- Swift
- Objective-C
func scheduleManager(_ aScheduleAdManager: GFPVideoAdScheduleManager, didFailScheduleWithError aError: GFPError) {
...
}
- (void)scheduleManager:(GFPVideoAdScheduleManager *)aScheduleAdManager didFailScheduleWithError:(GFPError *)aError {
...
}
스케줄 수행이 모두 완료된 경우
- Swift
- Objective-C
func scheduleManagerDidCompleted(_ aScheduleAdManager: GFPVideoAdScheduleManager) {
...
}
- (void)scheduleManagerDidCompleted:(GFPVideoAdScheduleManager *)aScheduleAdManager {
...
}
컨텐츠 재생 정지 관련 이벤트들
컨텐츠를 재생할 시점이 되었을 때 호출
- Swift
- Objective-C
func scheduleManagerContentResumeRequest(_ aScheduleAdManager: GFPVideoAdScheduleManager) {
/* 전광고가 없을 경우나 광고 재생 실패 시 컨텐츠 player 재생 */
...
}
- (void)scheduleManagerContentResumeRequest:(GFPVideoAdScheduleManager *)aScheduleAdManager {
/* 전광고가 없을 경우나 광고 재생 실패 시 컨텐츠 player 재생 */
...
}
컨텐츠 정지할 시점이 되었을 때 호출
- Swift
- Objective-C
func scheduleManagerContentPauseRequest(_ aScheduleAdManager: GFPVideoAdScheduleManager) {
/* 광고 재생 전 컨텐츠 player 정지 */
...
}