کیت توسعه نرمافزار IMA از پیشبارگیری داراییهای آگهی ویدیویی پشتیبانی میکند. میتوانید این ویژگی را در ادغام SDK خود فعال کنید تا انتقال یکپارچهتری بین آگهیها و محتوا ارائه دهید. این راهنما جزئیات فنی پیادهسازی پیشبارگیری رسانه با کیت توسعه نرمافزار IMA را بررسی میکند.
پیشنیاز
پیشبارگیری به نسخه ۳.۱۷.۰ یا بالاتر از کیت توسعه نرمافزار IMA Android نیاز دارد.
فعال کردن پیشبارگیری
برای فعال کردن پیشبارگیری، ازAdsRenderingSettings.setEnablePreloading()
استفاده کنید تا پیشبارگیری را روی «صحیح» تنظیم کنید. این کار باید در 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.
}
آزمایش کردن پیادهسازیهای پیشبارگیری سفارشی
برای پیادهسازیهای پیشبارگیری سفارشی، آزمایش موارد حاشیهای زیر برای تأیید راهاندازی صحیح پیشبارگیری توصیه میشود:
- آگهی پیشپخش تکی
- پیشپخش دسته آگهی ۳تایی
- آگهی میانویدیویی ۳ تایی
- جستجوی میانویدیویی دوم پساز شروع پیشبارگیری میانویدیویی اول اما قبلاز پخش آن
- بازپخش پسویدیو
زمانبندی
جدول زیر تغییرات زمانبندی بارگذاری آگهی را هنگام فعال بودن پیشبارگیری خلاصه میکند:
| رویداد | با پیشبارگیری | بدون پیشبارگیری |
|---|---|---|
| آگهی VAST درخواست شد | AdsLoader.requestAds() |
AdsLoader.requestAds() |
| پیشپخش بار شد (تک آگهی) | AdsManager.init() |
AdsManager.start() |
| پیشپخش بار شد (قوانین VMAP/آگهی) | AdsManager.init() |
AdsManager.init() |
| میانویدیویی یا پسویدیویی بار شد | برای اولین آگهی در وقفه آگهی، ۸ ثانیه قبلاز زمان شروع آگهی. برای آگهیهای متوالی، وقتی آگهی قبلی شروع به پخش میکند. | در زمان شروع آگهی. |
پرسشگان
- آیا پیشبارگیری رسانه کل طرحآگهی را بار میکند؟
- نه، معمولاً وقتی بازپخش آگهی شروع میشود، طرحآگهی بهطور کامل بار نشده است. هدف از پیشبارگذاری بهبود تجربه کاربری ازطریق بهحداقل رساندن زمان بار شدن آگهی است. این محیط برای پشتیبانی از ارائه آگهی آفلاین درنظر گرفته نشده است.
- آیا پیشبارگیری رسانه باید برای VAST آگهی و همچنین رسانه فعال شود؟
- نه، کیت توسعه نرمافزار همیشه VAST آگهی را پیشبار میکند، صرفنظر از این تنظیم پیشبار.