טעינה מראש של מדיה

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 BasicExample. כשמשלבים את התוסף 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 קבוצות של מודעות
  • רצף של 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 של המודעה, ללא קשר להגדרת הטעינה המראש.