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

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()
המודעה לפני הסרטון נטענה (כללי VMAP/כללי מודעות) AdsManager.init() AdsManager.init()
בוצעה טעינה של מודעה באמצע סרטון (mid-roll) או בסוף סרטון (post-roll) למודעה הראשונה בהפסקה למודעה, 8 שניות לפני שעת ההתחלה של המודעה. במקרה של מודעות ברצף, כשהמודעה הקודמת מתחילה לפעול. בזמן ההתחלה של המודעה.

שאלות נפוצות

האם טעינה מראש של מדיה טוענת את הקריאייטיב המלא?
לא, הקריאייטיב בדרך כלל לא נטען במלואו בתחילת הצגת המודעה. הטעינה מראש נועדה לשפר את חוויית המשתמש על ידי צמצום משך הזמן שנדרש לטעינת המודעה. היא לא מיועדת לתמוך בהצגת מודעות אופליין.
האם צריך להפעיל טעינה מראש של מדיה ל-VAST של המודעה ולמדיה?
לא, ה-SDK תמיד טוען מראש את ה-VAST של המודעה, בלי קשר להגדרת הטעינה מראש הזו.