IMA SDK מאפשר לכם לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות שלכם. IMA SDK יכול לשלוח בקשה להצגת מודעות מכל שרת מודעות שתואם ל-VAST ולנהל את ההפעלה של המודעות באפליקציות שלך. בעזרת ערכות IMA DAI SDK, אפליקציות שולחות בקשות לשידור וידאו של מודעה או תוכן וידאו - VOD או תוכן בשידור חי. לאחר מכן, ה-SDK יחזיר שידור וידאו משולב, כך שלא יהיה צורך לנהל את המעבר בין מודעות וידאו לתוכן בתוך האפליקציה.
בחירת פתרון DAI שמעניין אתכם
הטמעת DAI בפודים
מדריך זה מדגים איך להפעיל שידור חי או VOD שמציג DAI Pod באמצעות IMA DAI SDK ל-tvOS באמצעות נגן וידאו פשוט. אם אתם רוצים לעקוב אחרי הדוגמה המלאה, מורידים את האפליקציה לדוגמה של Pod serving (Obj C או Swift).
סקירה כללית של הצגת IMA DAI Pod
ההטמעה של הצגת רצף מודעות באמצעות IMA DAI SDK ל-tvOS כוללת שני רכיבים עיקריים:
StreamRequest
: אובייקט שמגדיר בקשה לשידור לשרתי הפרסום של Google. צריך ליצור אותן באמצעותIMAPodStreamRequest
אוIMAPodVODStreamRequest
כדי להפעיל הצגה של רצף מודעות. לשתי השיטות נדרש קוד רשת, ול-IMAPodStreamRequest
נדרש גם מפתח נכס מותאם אישית. אפשר להשתמש במפתח API.IMAStreamManager
: אובייקט שמטפל בתקשורת בין שידור הווידאו לבין ה-IMA DAI SDK, למשל הפעלת פינגים למעקב והעברת אירועים משידור אל בעל התוכן הדיגיטלי.
דרישות מוקדמות
לפני שמתחילים:
- Xcode מגרסה 13 ואילך.
- CocoaPods (מועדף), Swift Package Manager או עותק להורדה של IMA SDK ל-tvOS.
- אפליקציית tvOS שכבר מוגדרת באמצעות IMA DAI SDK כדי להפעיל וידאו בסטרימינג עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. ב-BasicExample יש את בסיס הקוד (codebase) שאליו יש הפניה במדריך הזה. מידע נוסף על ההטמעה של IMA DAI SDK זמין במדריך למתחילים.
הגדרת המשתנים להצגת מודעות pod
כל השינויים הנדרשים להצגה של רצף מודעות מתבצעים ב-ViewController.swift
ב-Swift או ב-ViewController.m
ב-Objective-C. קטעי הקוד במדריך הזה משתמשים
בשפת Swift כברירת מחדל. השלב הראשון הוא לעדכן את המשתנים הקבועים.
אלו הם הקבועים של הבקשות לזרם מודעות של רצף מודעות שיש להוסיף:
STREAM_URL
(משמשת רק לשידורים חיים): כתובת ה-URL של שידור הווידאו שסופק על ידי מפעיל המניפולציה של המניפסט או שותף צד שלישי שמשתמשים בהצגת רצף מודעות. עליך להזין את מזהה מקור הנתונים שסופק על ידי IMA DAI SDK לפני שליחת הבקשה. במקרה כזה, כתובת ה-URL של מקור הנתונים כוללת placeholder שנקרא"[[STREAMID]]"
, שמוחלף במזהה מקור הנתונים, לפני שליחת הבקשה.NETWORK_CODE
: קוד הרשת של חשבון Ad Manager 360.CUSTOM_ASSET_KEY
(משמש רק לשידורים חיים): מפתח הנכס המותאם אישית שמזהה את האירוע של הצגת הרצף ב-Ad Manager 360. אפשר ליצור אותו באמצעות מפעיל המניפולציה של המניפסט או שותף להצגת רצף מודעות של צד שלישי.API_KEY
(משמש רק לשידורים חיים): מפתח API אופציונלי שנדרש כדי לאחזר מזהה שידור מ-IMA DAI SDK.
משנים את קטע המשתנים של הדוגמה כך שיתאים לקטעים הבאים:
...
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
הצגת רצף מודעות בשידור חי
משנים את השיטה requestStream
כדי ליצור בקשה לשידור של רצף שידורים חיים על ידי יצירת IMAPodStreamRequest
.
...
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
משנים את השיטה requestStream
כדי ליצור בקשה לשידור של רצף VOD על ידי יצירת IMAPodVODStreamRequest
.
...
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 של השידור
הצגת רצף מודעות בשידור חי
משנים את השיטות של IMAAdsLoaderDelegate
באמצעות streamManager.streamId
על מנת לקבל את מזהה מקור הנתונים. לאחר מכן, מזינים את מזהה מקור הנתונים בשדה STREAM_URL
ומחליפים את "[[STREAMID]]"
. אחרי ביצוע השינוי הזה, אפשר יהיה להגדיר את כתובת ה-URL החדשה של השידור באמצעות videoDisplay.loadStream()
.
...
// 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
משנים את השיטות של IMAAdsLoaderDelegate
באמצעות streamManager.streamId
על מנת לקבל את מזהה מקור הנתונים. לאחר מכן, צריך לבקש כתובת URL של השידור משותף טכנולוגיית הווידאו (VTP) ולהתקשר אל IMAStreamManager.loadThirdPartyStream()
כדי ש-IMA
תטען את כתובת ה-URL של השידור ואת כל הכתוביות שהחזיר ה-TVP.
...
// 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 SDK ל-tvOS. כדי לראות דוגמאות נוספות לשימוש ב-IMA DAI SDK, עיינו בדוגמאות ב-GitHub.