IMA SDK תומך בחיבור מראש של נכסי מודעות וידאו. אתם יכולים להפעיל את התכונה הזו בשילוב ה-SDK כדי לספק מעבר חלק יותר בין המודעות לתוכן. המדריך הזה עוסק בפרטים הטכניים של הטמעת טעינה מראש של מדיה באמצעות IMA SDK.
דרישות מוקדמות
כדי לבצע טעינת נתונים מראש, נדרשת גרסת 3.17.0 ואילך של IMA Android SDK.
הפעלת טעינה מראש
כדי להפעיל את הטעינה מראש, משתמשים ב-AdsRenderingSettings.setEnablePreloading()
כדי להגדיר את הטעינה מראש כ-true. צריך לעשות זאת בתוך פונקציית ה-callback onAdsManagerLoaded()
:
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
תמיכה בטעינה מראש באמצעות VideoAdPlayer מותאם אישית
אנחנו ממליצים על התוסף ExoPlayer-IMA שמשמש באפליקציית הדוגמה של Android ExoPlayer. כשהתוסף ExoPlayer-IMA משולב, הטעינה מראש מופעלת כברירת מחדל והוא כולל תמיכה מובנית בטעינה מראש.
אם מטמיעים טעינה מראש בלי התוסף ExoPlayer-IMA, נדרשים שינויים נוספים אחרי הקריאה ל-setEnablePreloading()
. כדי שנגן וידאו יתמוך בחיוב מראש של מודעות, הוא צריך לעקוב אחרי אובייקטים מסוג AdMediaInfo
שמועברים בקריאות מ-loadAd()
ומ-playAd()
, ולכלול את AdMediaInfo
הנכון בקריאות ל-AdPlayerCallback
. יכול להיות שתצטרכו מבנה נתונים לניהול אובייקטים מסוג AdMediaInfo
, מכיוון שאירוע loadAd()
של AdMediaInfo
מאוחר יותר עשוי להתרחש בזמן שההפעלה של AdMediaInfo
הקודם נמשכת. בדוגמה הבאה מפורטים חלק מהשינויים שעשויים להידרש כדי שהאפליקציה תתמוך בעומס מראש:
// enum for cases of PlayerState.
static enum PlayerState {
IDLE,
LOADED,
PLAYING,
PAUSED,
}
...
private final List<VideoAdPlayer.VideoAdPlayerCallback> callbacks;
private final ArrayList<AdMediaInfo> mediaInfos = new ArrayList<>();
private PlayerState playerState;
private boolean adCurrentlyLoaded;
...
@Override
public void playAd(AdMediaInfo adMediaInfo) {
switch (playerState) {
case LOADED:
for (VideoAdPlayerCallback callback : callbacks) {
callback.onPlay(adMediaInfo);
}
break;
case PAUSED:
for (VideoAdPlayerCallback callback : callbacks) {
callback.onResume(adMediaInfo);
}
break;
case PLAYING:
// Intentionally and silently ignore since it is already playing from a prior media item,
// note that onPlay is triggered by positionDiscontinuity.
return;
case IDLE:
throw new IllegalStateException("Call to playAd when player state is not LOADED.");
}
playerState = PlayerState.PLAYING;
player.setPlayWhenReady(true);
}
@Override
public void loadAd(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) {
if (adCurrentlyLoaded == true) {
mediaInfos.add(adMediaInfo);
return;
}
player.stop();
player.seekTo(0);
mediaInfos.clear();
mediaInfos.add(adMediaInfo);
player.setPlayWhenReady(false);
player.loadMedia(adMediaInfo.getUrl());
playerState = PlayerState.LOADED;
adCurrentlyLoaded = true;
}
@Override
public void stopAd(AdMediaInfo adMediaInfo) {
if (allAdsInBreakHavePlayed()) {
if (isFinalAd(adMediaInfo)) {
// handle clean up after all ads have played.
} else {
seekToNextItem(player);
}
} else {
mediaInfos.remove(adMediaInfo);
}
}
private boolean allAdsInBreakHavePlayed() {
// Code to determine if all the ads in the current ad break have completed.
}
private boolean isFinalAd(AdMediaInfo adMediaInfo) {
// Code to determine if this adMediaInfo is the final ad.
}
private void seekToNextItem(YourPlayerClass player) {
// Code to seek your player to the next media item.
}
בדיקת הטמעות של טעינת נתונים מראש בהתאמה אישית
כשמפעילים הטמעות של טעינת נתונים מראש בהתאמה אישית, מומלץ לבדוק את התרחישים הקיצוניים הבאים כדי לוודא שההגדרה של טעינת הנתונים מראש נכונה:
- מודעה יחידה לפני סרטון
- רצף מודעות של 3 מודעות לפני הסרטון
- מודעה באמצע סרטון (mid-roll) ברצף של 3 מודעות
- דילוג אל מודעה שנייה באמצע הסרטון אחרי שהמודעה הראשונה באמצע הסרטון התחילה לטעון מראש, אבל לפני שהיא הופעלה
- הפעלה של מודעות פוסט-רול
תזמון
בטבלה הבאה מפורט סיכום של השינויים בלוחות הזמנים לטעינת המודעות כשההפעלה מראש מופעלת:
אירוע | עם טעינה מראש | ללא טעינה מראש |
---|---|---|
הוגשה בקשה להצגת מודעה מסוג VAST | AdsLoader.requestAds() |
AdsLoader.requestAds() |
מודעה לפני סרטון נטענה (מודעה אחת) | AdsManager.init() |
AdsManager.start() |
מודעה לפני סרטון (pre-roll) נטענה (VMAP/כללי מודעות) | AdsManager.init() |
AdsManager.init() |
מודעה באמצע הסרטון (mid-roll) או מודעה בסוף הסרטון (post-roll) נטענה | במודעה הראשונה בהפסקה למודעה, 8 שניות לפני זמן ההתחלה של המודעה. במודעות רצופות, כשהמודעה הקודמת מתחילה לפעול. | בשעת ההתחלה של המודעה. |
שאלות נפוצות
- האם טעינה מראש של מדיה טוענת את הקריאייטיב המלא?
- לא, בדרך כלל הקריאייטיב לא נטען במלואו כשהמודעה מתחילה לפעול. מטרת הטעינה מראש היא לשפר את חוויית המשתמש על ידי צמצום הזמן שלוקח למודעה להיטען. היא לא מיועדת לתמוך בהצגת מודעות אופליין.
- האם צריך להפעיל את טעינת המדיה מראש גם ב-VAST של המודעה וגם במדיה?
- לא, ערכת ה-SDK תמיד טוענת מראש את קובץ ה-VAST של המודעה, ללא קשר להגדרה הזו של טעינת המידע מראש.