ערכת IMA SDK תומכת בטעינה מראש של נכסי מודעות וידאו. אפשר להפעיל את התכונה הזו בשילוב של ה-SDK כדי לספק מעבר חלק יותר בין מודעות לתוכן. במדריך הזה מוסבר על הפרטים הטכניים של הטמעת טעינה מראש של מדיה באמצעות IMA SDK.
דרישות מוקדמות
כדי להשתמש בטעינה מראש, צריך גרסה 3.17.0 ואילך של IMA Android SDK.
הפעלת טעינה מראש
כדי להפעיל טעינה מראש, משתמשים ב-AdsRenderingSettings.setEnablePreloading()
כדי להגדיר את הטעינה מראש כ-true. הפעולה הזו צריכה להתבצע בתוך onAdsManagerLoaded()
callback:
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
תמיכה בטעינה מראש באמצעות VideoAdPlayer מותאם אישית
מומלץ להשתמש בתוסף ExoPlayer-IMA שמשמש באפליקציית הדוגמה Android ExoPlayer. כשמשלבים את התוסף הזה, הטעינה מראש מופעלת כברירת מחדל והוא כולל תמיכה מובנית בטעינה מראש.
אם מטמיעים טעינה מראש בלי התוסף ExoPlayer-IMA, צריך לבצע שינויים נוספים אחרי הקריאה ל-setEnablePreloading()
. כדי שנגן וידאו יתמוך בטעינה מראש של מודעות, הוא צריך לעקוב אחרי אובייקטים מסוג AdMediaInfo
שמועברים בקריאות מ-loadAd()
ומ-playAd()
, ולכלול את AdMediaInfo
הנכון בקריאות אל AdPlayerCallback
. יכול להיות שתצטרכו מבנה נתונים לניהול אובייקטים של AdMediaInfo
, כי יכול להיות שיתרחש AdMediaInfo
של AdMediaInfo
בזמן שמתבצעת השמעה של AdMediaInfo
קודם.loadAd()
בדוגמה הבאה אפשר לראות חלק מהשינויים שאולי תצטרכו לבצע כדי שהאפליקציה שלכם תתמוך בטעינה מראש:
// 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 ad pod preroll
- 3 ad pod midroll
- דילוג לפרסומת אמצע סרטון שנייה אחרי שהפרסומת הראשונה התחילה להיטען מראש אבל לפני שהיא הופעלה
- הפעלה של סרטון אחרי סרטון
תזמון
בטבלה הבאה מפורטים השינויים בתזמון של טעינת המודעות כשמופעלת טעינה מראש:
אירוע | עם טעינה מראש | ללא טעינה מראש |
---|---|---|
הוגשה בקשה להצגת מודעת VAST | AdsLoader.requestAds() |
AdsLoader.requestAds() |
מודעה לפני סרטון נטענה (מודעה יחידה) | AdsManager.init() |
AdsManager.start() |
מודעה לפני סרטון נטענה (VMAP/כללי מודעות) | AdsManager.init() |
AdsManager.init() |
מודעה באמצע הסרטון או בסוף הסרטון נטענה | למודעה הראשונה בהפסקה למודעה, 8 שניות לפני זמן ההתחלה של המודעה. למודעות רצופות, כשהמודעה הקודמת מתחילה לפעול. | בזמן ההתחלה של המודעה. |
שאלות נפוצות
- האם טעינה מראש של מדיה טוענת את הקריאייטיב המלא?
- לא, בדרך כלל הקריאייטיב לא נטען במלואו כשההפעלה של המודעה מתחילה. טעינה מראש נועדה לשפר את חוויית המשתמש על ידי קיצור הזמן שלוקח למודעה להיטען. היא לא מיועדת לתמוך בהצגת מודעות במצב אופליין.
- האם צריך להפעיל טעינה מראש של מדיה גם עבור מודעות VAST וגם עבור מדיה?
- לא, ערכת ה-SDK תמיד טוענת מראש את נתוני ה-VAST של המודעה, בלי קשר להגדרת הטעינה מראש הזו.