ערכות IMA SDK מאפשרות לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות. IMA SDK יכול לשלוח בקשות למודעות מכל שרת מודעות שתואם ל-VAST ולנהל את ההפעלה של המודעות באפליקציות שלכם. באמצעות ערכות IMA DAI SDK, האפליקציות שולחות בקשה לסטרימינג של מודעות ותוכן וידאו – תוכן VOD או תוכן בשידור חי. לאחר מכן, ה-SDK מחזיר זרם וידאו משולב, כך שלא צריך לנהל את המעבר בין מודעה לתוכן וידאו באפליקציה.
בחירת פתרון DAI שמעניין אתכם
הצגת DAI ב-Pod
במדריך הזה מוסבר איך להפעיל שידור חי או תוכן וידאו על פי דרישה (VOD) של בלוק מודעות דינמיות (DAI) באמצעות IMA DAI SDK ל-tvOS עם נגן וידאו. כדי לראות או לעקוב אחרי שילוב לדוגמה שהושלם, מורידים את אפליקציית הדוגמה Pod Serving (Obj C או Swift).
סקירה כללית על הצגת מודעות דינמיות (DAI) ב-IMA
הטמעה של הצגת מודעות בפוד באמצעות IMA DAI SDK ל-tvOS כוללת שני רכיבים עיקריים:
StreamRequest: אובייקט שמגדיר בקשה להזרמת נתונים לשרתי הפרסום של Google. צריך ליצור אותו באמצעותIMAPodStreamRequestאוIMAPodVODStreamRequestכדי להפעיל את האפשרות להצגת פודים. בשתי השיטות נדרש קוד רשת, ובשיטהIMAPodStreamRequestנדרש גם מפתח נכס מותאם אישית. מפתח API הוא אופציונלי.
IMAStreamManager: אובייקט שמטפל בתקשורת בין הסטרימינג של הווידאו לבין IMA DAI SDK, כמו הפעלת פינגים למעקב והעברת אירועים של סטרימינג לבעל האפליקציה.
דרישות מוקדמות
לפני שמתחילים, צריך:
- Xcode מגרסה 13 ואילך.
- שיטה להתקנת IMA SDK:
- Swift Package Manager (מומלץ)
- CocoaPods
- עותק להורדה של IMA SDK ל-tvOS
- אפליקציית tvOS שכבר הוגדרה עם IMA DAI SDK להפעלת סטרימינג של וידאו עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. הקוד של BasicExample מופיע במדריך הזה. מידע נוסף על הטמעה של IMA DAI SDK זמין במדריך למתחילים.
הגדרת משתנים של הצגת מודעות ב-Pod
כל השינויים ב-Pod Serving צריכים להתבצע ב-ViewController.swift ב-Swift או ב-ViewController.m ב-Objective-C. קטעי הקוד במדריך הזה
מוגדרים כברירת מחדל לשימוש בשפת Swift. השלב הראשון הוא לעדכן את המשתנים הקבועים.
מוסיפים את הקבועים הבאים של בקשות לסטרימינג של בלוקים של מודעות:
-
STREAM_URL(לשימוש בשידורים חיים בלבד): כתובת ה-URL של זרם הווידאו שסופקה על ידי כלי לשינוי מניפסט או שותף צד שלישי באמצעות הצגת מודעות בשיטת Pod. הוא צריך לדרוש ממך להוסיף את מזהה הסטרימינג שסופק על ידי 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 = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
יצירת בקשה לשידור פודקאסט בשידור חי או לפי דרישה (VOD)
הצגת פודקאסטים בשידור חי
משנים את ה-method 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 בסטרימינג
משנים את ה-method 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]]". אחרי שמבצעים את השינוי הזה, מגדירים את כתובת האתר החדשה של השידור באמצעות התג 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 של הסטרימינג ואת כל הכתוביות שהוחזרו על ידי שותף טכנולוגיית הווידאו.
...
// 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
אחרי שמסיימים בהצלחה את הבקשה וההצגה של מודעות בסטרימינג של Pod Serving באמצעות IMA DAI SDK, מומלץ לנקות את כל המשאבים אחרי שמסיימים את הסשן של Pod Serving. מתקשרים אל IMAStreamManager.destroy() כדי להפסיק את ההפעלה של הסטרימינג, להפסיק את כל המעקב אחר המודעות ולשחרר את כל נכסי הסטרימינג שנטענו.
דוגמאות נוספות לשימוש ב-tvOS SDK זמינות בדוגמאות ב-GitHub.