IMA SDK를 사용하면 웹사이트와 앱에 멀티미디어 광고를 쉽게 통합할 수 있습니다. IMA SDK는 모든 VAST 호환 광고 서버에서 광고를 요청하고 앱에서 광고 재생을 관리할 수 있습니다. IMA DAI SDK를 사용하면 앱에서 광고 및 콘텐츠 동영상(VOD 또는 라이브 콘텐츠)에 대한 스트림을 요청합니다. 그러면 SDK가 결합된 동영상 스트림을 반환하므로 앱 내에서 광고 동영상과 콘텐츠 동영상 간에 전환을 관리할 필요가 없습니다.
관심 있는 DAI 솔루션을 선택합니다
DAI 광고 모음 게재
이 가이드에서는 동영상 플레이어와 함께 iOS용 IMA DAI SDK를 사용하여 DAI 광고 모음 게재 라이브 또는 VOD 스트림을 재생하는 방법을 설명합니다. 완성된 샘플 통합을 보거나 따라 하려면 Objective-C 또는 Swift용 포드 제공 예시를 다운로드하세요.
IMA DAI 광고 모음 게재 개요
iOS용 IMA DAI SDK를 사용하여 광고 모음 게재를 구현하려면 다음과 같은 두 가지 주요 구성요소가 필요합니다.
StreamRequest
: Google의 광고 서버에 대한 스트림 요청을 정의하는 객체입니다. 포드 게재를 사용 설정하려면IMAPodStreamRequest
또는IMAPodVODStreamRequest
를 사용하여 만들어야 합니다. 두 방법 모두 네트워크 코드가 필요하며IMAPodStreamRequest
에는 맞춤 애셋 키도 필요합니다. API 키는 선택사항입니다.IMAStreamManager
: 동영상 스트림과 IMA DAI SDK 간의 통신(예: 추적 핑 실행 및 스트림 이벤트를 게시자에게 전달)을 처리하는 객체입니다.
기본 요건
시작하기 전에 다음이 필요합니다.
- Xcode 13 이상
- CocoaPods (권장), Swift Package Manager 또는 다운로드한 iOS용 IMA DAI SDK 사본
- DAI 광고가 포함된 동영상 스트림을 재생하도록 이미 IMA DAI SDK로 설정된 iOS 앱 이러한 앱이 없는 경우 iOS DAI BasicExample을 시작점으로 사용하는 것이 좋습니다. BasicExample에는 이 가이드에서 참조된 코드베이스가 있습니다. IMA DAI SDK를 구현하는 방법에 관한 자세한 내용은 빠른 시작 가이드를 참고하세요.
광고 모음 게재 변수 설정
포드 게재에 필요한 모든 변경사항은 swift의 ViewController.swift 또는 Objective-C의 ViewController.m에서 실행됩니다. 이 가이드의 스니펫은 기본적으로 Swift 언어를 사용합니다. 첫 번째 단계는 상수 변수를 업데이트하는 것입니다.
추가할 광고 모음 스트림 요청 상수는 다음과 같습니다.
STREAM_URL
(라이브 스트림에만 사용됨): 매니페스트 조작자 또는 광고 모음 게재를 사용하는 서드 파티 파트너가 제공한 동영상 스트림 URL입니다. 요청하기 전에 IMA DAI SDK에서 제공한 스트림 ID를 삽입해야 합니다. 이 경우 스트림 URL에는 요청하기 전에 스트림 ID로 대체되는 자리표시자"[[STREAMID]]"
가 포함됩니다.NETWORK_CODE
: Ad Manager 360 계정의 네트워크 코드입니다.CUSTOM_ASSET_KEY
(라이브 스트림에만 사용됨): Ad Manager 360에서 광고 모음 게재 이벤트를 식별하는 맞춤 애셋 키입니다. 매니페스트 조작기 또는 서드 파티 광고 모음 게재 파트너가 이를 만들 수 있습니다.API_KEY
(라이브 스트림에만 사용됨): IMA DAI SDK에서 스트림 ID를 검색하는 데 필요할 수 있는 선택적 API 키입니다.
예시의 변수 섹션을 다음과 같이 변경합니다.
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl =
"https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
static let networkCode = "51636543"
static let customAssetKey = "google-sample"
static let APIKey = ""
static let backupStreamURLString =
"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"
var adsLoader: IMAAdsLoader?
...
라이브 또는 VOD 광고 모음 스트림 요청 만들기
라이브 스트림 광고 모음 게재
IMAPodStreamRequest
를 인스턴스화하여 라이브 포드 스트림 요청을 만들도록 requestStream
메서드를 수정합니다.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
VOD 스트림 광고 모음 게재
IMAPodVODStreamRequest
를 인스턴스화하여 VOD 모음 스트림 요청을 만들도록 requestStream
메서드를 수정합니다.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
스트림 URL 수정 및 설정
라이브 스트림 광고 모음 게재
streamManager.streamId
를 사용하여 스트림 ID를 가져오는 IMAAdsLoaderDelegate
메서드를 수정합니다. 그런 다음 STREAM_URL
에 스트림 ID를 삽입하여 "[[STREAMID]]"
를 대체합니다. 변경이 완료되면 videoDisplay.loadStream()
를 사용하여 새 스트림 URL을 설정할 수 있습니다.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
VOD 스트림 광고 모음 게재
streamManager.streamId
를 사용하여 스트림 ID를 가져오는 IMAAdsLoaderDelegate
메서드를 수정합니다. 그런 다음 동영상 기술 파트너 (VTP)에게 스트림 URL을 요청합니다. 그런 다음 IMAStreamManager.loadThirdPartyStream()
를 호출하여 IMA가 TVP에서 반환한 스트림 URL과 자막을 로드하도록 합니다.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
IMA DAI 애셋 정리
IMA DAI SDK를 사용하여 광고 모음 게재 스트림에서 광고 요청 및 표시를 완료한 후에는 광고 모음 게재 세션이 완료된 후에 리소스를 정리하는 것이 좋습니다. IMAStreamManager.destroy()
를 호출하여 스트림 재생을 중지하고, 모든 광고 추적을 중지하고, 로드된 모든 스트림 애셋을 해제합니다.
iOS SDK가 사용되는 다른 예시를 보려면 GitHub의 샘플을 참고하세요.