پیش بارگیری رسانه

IMA SDK از پیش بارگیری دارایی های تبلیغات ویدیویی پشتیبانی می کند. می‌توانید این ویژگی را در ادغام SDK خود فعال کنید تا انتقال یکپارچه‌تر بین تبلیغات و محتوا فراهم شود. این راهنما به جزئیات فنی اجرای پیش‌بارگذاری رسانه با IMA SDK می‌پردازد.

پيش نياز

پیش بارگیری به نسخه 3.17.0 یا بالاتر از IMA Android SDK نیاز دارد.

پیش بارگیری را فعال کنید

برای فعال کردن پیش بارگیری، از AdsRenderingSettings.setEnablePreloading() استفاده کنید تا پیش بارگیری را روی true تنظیم کنید. این باید در پاسخ به تماس onAdsManagerLoaded() انجام شود:

@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
  ...
  AdsRenderingSettings adsRenderingSettings =
      ImaSdkFactory.getInstance().createAdsRenderingSettings();
  adsRenderingSettings.setEnablePreloading(true);
  mAdsManager.init(adsRenderingSettings);
}

پشتیبانی از پیش بارگیری با VideoAdPlayer سفارشی

ما افزونه ExoPlayer-IMA را توصیه می کنیم که در برنامه BasicExample Android استفاده می شود. هنگامی که برنامه افزودنی 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 آگهی میانی
  • جستجوی میان‌دول دوم پس از بارگذاری اولیه میان‌دول اول، اما قبل از پخش آن
  • پخش Postroll

زمان سنجی

جدول زیر تغییرات زمان‌بندی بارگذاری تبلیغات را در زمان فعال بودن بارگذاری اولیه خلاصه می‌کند:

رویداد با پیش بارگذاری بدون پیش بارگذاری
آگهی VAST درخواست شد AdsLoader.requestAds() AdsLoader.requestAds()
بارگیری قبل از پخش (تک آگهی) AdsManager.init() AdsManager.start()
بارگیری قبل از پخش (قوانین VMAP/Ad) AdsManager.init() AdsManager.init()
Mid-roll یا post-roll بارگذاری شده است برای اولین آگهی در وقفه تبلیغاتی، 8 ثانیه قبل از زمان شروع آگهی. برای تبلیغات متوالی، زمانی که تبلیغ قبلی شروع به پخش می کند. در زمان شروع تبلیغات

سوالات متداول

آیا پیش بارگذاری رسانه، خلاقیت کامل را بارگیری می کند؟
خیر، معمولاً هنگام شروع پخش آگهی، آگهی به طور کامل بارگیری نمی شود. پیش بارگذاری برای بهبود تجربه کاربر با به حداقل رساندن زمان بارگذاری آگهی در نظر گرفته شده است. این برنامه برای پشتیبانی از ارائه تبلیغات آفلاین در نظر گرفته نشده است.
آیا پیش بارگیری رسانه باید برای VAST آگهی و همچنین رسانه فعال باشد؟
خیر، SDK همیشه VAST آگهی را از قبل بارگیری می کند، صرف نظر از این تنظیم پیش بارگیری.