ערכות IMA SDK מאפשרות לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות. IMA SDKs יכולים לשלוח בקשות למודעות מכל שרת מודעות שתואם ל-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 ואילך.
- CocoaPods (מומלץ), Swift Package Manager או עותק להורדה של IMA DAI SDK ל-tvOS.
- אפליקציית tvOS שכבר הוגדרה עם IMA DAI SDK להפעלת סטרימינג של וידאו עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-tvOS DAI BasicExample כנקודת התחלה. ב-BasicExample יש בסיס קוד שמופיע במדריך הזה. מידע נוסף על הטמעה של IMA DAI SDK זמין במדריך למתחילים.
הגדרת משתנים להצגת מודעות ב-Pod
כל השינויים שנדרשים להצגת מודעות ב-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 = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
יצירת בקשה לשידור פודקאסט בשידור חי או לפי דרישה
הצגת פודקאסטים בשידור חי
משנים את ה-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]]"
. אחרי ביצוע השינוי, אפשר להגדיר את כתובת ה-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 של הסטרימינג ואת כל הכתוביות שהוחזרו על ידי שותף טכנולוגיית הווידאו.
...
// 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()
כדי להפסיק את ההפעלה של הסטרימינג, להפסיק את כל המעקב אחר המודעות ולשחרר את כל נכסי הסטרימינג שנטענו.
דוגמאות נוספות לשימוש ב-tvOS SDK זמינות בדוגמאות ב-GitHub.