ערכות ה-SDK של IMA מאפשרות לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות שלכם. ערכות IMA SDK יכולות לשלוח בקשה להצגת מודעות מכל שרת מודעות שתואם ל-VAST, ולנהל את הפעלת המודעות באפליקציות שלך. באמצעות ערכות ה-SDK של IMA DAI, האפליקציות שולחות בקשה לשידור של מודעת וידאו ותוכן וידאו – VOD או תוכן בשידור חי. לאחר מכן, ה-SDK מחזיר שידור וידאו משולב, כך שלא תצטרכו לנהל את המעבר בין סרטון המודעה לסרטון התוכן באפליקציה.
איך בוחרים את פתרון DAI שמעניין אתכם
הצגת מודעות דינמיות (DAI) ב-Pod
המדריך הזה מדגים איך להפעיל שידור חי או VOD של מודעות דינמיות (DAI) באמצעות IMA DAI SDK ל-tvOS עם נגן וידאו פשוט. אם אתם רוצים לעקוב אחרי דגימה מלאה, תוכלו להוריד את האפליקציה לדוגמה של Pod serving (Obj C או Swift).
סקירה כללית על הצגת מודעות ב-IMA DAI Pod
כדי להטמיע הצגת Pod באמצעות IMA DAI SDK ל-tvOS, צריך לבצע שני מרכיבים עיקריים:
StreamRequest
: אובייקט שמגדיר בקשה של מקור נתונים לשרתי הפרסום של Google. כדי להפעיל את הצגת ה-Pod, צריך ליצור אותו באמצעות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 יש את ה-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. אפשר ליצור אותו באמצעות הכלי לניהול המניפסט או שותף להצגת Pod של צד שלישי.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)
}
...
הצגת Pod של שידורים ב-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
}
...
הצגת Pod של שידורים ב-VOD
משנים את ה-methods 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
}
זהו! בעקבות הבקשה הזו מוצגות לך מודעות ורצף של הצגת מודעות ב-pod עם IMA DAI SDK ל-tvOS. בדוגמאות ב-GitHub תוכלו למצוא דוגמאות נוספות לשימוש ב-IMA DAI SDK.