ערכות IMA SDK מאפשרות לכם לשלב בקלות מודעות מולטימדיה באתרים ובאפליקציות שלכם. ערכות IMA SDK יכולות לשלוח בקשה להצגת מודעות מכל שרת מודעות שתואם ל-VAST, ולנהל את הפעלת המודעות באפליקציות שלך. בעזרת ערכות IMA DAI SDK, אפליקציות שולחות בקשה לשידור וידאו של מודעה ותוכן – VOD או תוכן בשידור חי. לאחר מכן, ה-SDK יחזיר שידור וידאו משולב, כך שלא יהיה צורך לנהל את המעבר בין מודעות וידאו בתוכן לבין מודעות וידאו בתוך האפליקציה.
איך בוחרים את פתרון DAI שמעניין אתכם
הטמעת מודעות דינמיות (DAI) ב-Pod
המדריך הזה מדגים איך להפעיל DAI Pod להצגת סטרימינג בשידור חי או ב-VOD, באמצעות IMA DAI SDK ל-iOS עם נגן וידאו פשוט. אם אתם רוצים לעקוב יחד עם דוגמה מלאה, תוכלו להוריד את הדוגמה להצגת Pod.
סקירה כללית בנושא הצגת מודעות Pod של IMA DAI
כדי להטמיע הצגת Pod באמצעות IMA DAI SDK ל-iOS יש שני רכיבים עיקריים:
StreamRequest
: אובייקט שמגדיר בקשה של מקור נתונים לשרתי הפרסום של Google. כדי להפעיל הצגת Pod, צריך ליצור אותו באמצעותIMAPodStreamRequest
אוIMAPodVODStreamRequest
. לשתי ה-methods נדרש קוד רשת, וגם ל-IMAPodStreamRequest
נדרש מפתח נכס מותאם אישית. מפתח API הוא אופציונלי.IMAStreamManager
: אובייקט שמטפל בתקשורת בין שידור הווידאו לבין IMA DAI SDK, למשל הפעלת פינגים של מעקב והעברת אירועים של סטרימינג אל בעל התוכן הדיגיטלי.
דרישות מוקדמות
לפני שמתחילים, צריך:
- Xcode 13 ואילך.
- CocoaPods (מועדף), Swift Package Manager, או עותק שהורד של IMA DAI SDK ל-iOS.
- אפליקציה ל-iOS שכבר הוגדרה עם IMA DAI SDK להפעלת שידורי וידאו עם מודעות DAI. אם עדיין אין לכם אפליקציה כזו, מומלץ להשתמש ב-iOS DAI BasicExample בתור נקודת התחלה. ל- BasicExample יש את ה-codebase שמוזכרים במדריך הזה. מידע נוסף על אופן ההטמעה של IMA DAI SDK זמין במדריך למתחילים.
הגדרת משתני ההצגה של pod
כל השינויים הנדרשים למילוי בקשות pod מתבצעים ב-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
(משמש רק בשידורים חיים): מפתח הנכס בהתאמה אישית שמזהה את אירוע הצגת ה-Pod ב-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?
...
יצירת בקשה לשידור חי או ל-Pod של VOD
הצגת Pod של שידורים חיים
צריך לשנות את השיטה requestStream
כדי ליצור בקשה ל-Podcast בשידור חי על ידי
הפעלת 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
צריך לשנות את ה-method requestStream
כדי ליצור בקשה ל-VOD ב-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 של השידור
הצגת Pod של שידורים חיים
משנים את ה-methods 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 ל-iOS. כדי לראות דוגמאות נוספות של שימוש ב-IMA DAI SDK, חפשו את הדוגמאות ב-GitHub.