IMA SDK mendukung pramuat aset iklan video. Anda dapat mengaktifkan fitur ini dalam integrasi SDK untuk memberikan transisi yang lebih lancar antara iklan dan konten. Panduan ini membahas detail teknis penerapan pramuat media dengan IMA SDK.
Prasyarat
Pemuatan sebelumnya memerlukan IMA Android SDK versi 3.17.0 atau yang lebih tinggi.
Mengaktifkan pramuat
Untuk mengaktifkan pramuat, gunakanAdsRenderingSettings.setEnablePreloading()
untuk menetapkan pramuat ke benar (true). Tindakan ini harus dilakukan dalam callback onAdsManagerLoaded()
:
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
Mendukung pramuat dengan VideoAdPlayer kustom
Sebaiknya gunakan ekstensi ExoPlayer-IMA yang digunakan di aplikasi contoh ExoPlayer Android. Saat diintegrasikan, ekstensi ExoPlayer-IMA mengaktifkan pramuat secara default dan menyertakan dukungan pramuat bawaan.
Jika Anda menerapkan pramuat tanpa ekstensi ExoPlayer-IMA,
perubahan tambahan diperlukan setelah setEnablePreloading()
dipanggil. Agar
pemutar video dapat mendukung pramuat iklan, pemutar harus melacak
objek AdMediaInfo
yang diteruskan dalam panggilan dari loadAd()
dan playAd()
,
dan menyertakan AdMediaInfo
yang benar pada panggilan AdPlayerCallback
. Hal ini mungkin
memerlukan struktur data untuk mengelola objek AdMediaInfo
, mengingat loadAd()
untuk AdMediaInfo
berikutnya dapat terjadi saat AdMediaInfo
sebelumnya
saat ini diputar. Contoh berikut menunjukkan beberapa perubahan
yang mungkin perlu Anda lakukan agar aplikasi mendukung pramuat:
// 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.
}
Menguji implementasi pramuat kustom
Untuk implementasi pramuat kustom, pengujian kasus ekstrem berikut direkomendasikan untuk memverifikasi penyiapan pramuat yang benar:
- Preroll iklan tunggal
- Preroll pod iklan 3
- 3 ad pod midroll
- Memutar ke midroll kedua setelah midroll pertama mulai dimuat sebelumnya, tetapi sebelum diputar
- Pemutaran post-roll
Waktu
Tabel berikut meringkas perubahan dalam pengaturan waktu pemuatan iklan saat pramuat diaktifkan:
Acara | Dengan Pramuat | Tanpa Pramuat |
---|---|---|
VAST iklan yang diminta | AdsLoader.requestAds() |
AdsLoader.requestAds() |
Pre-roll dimuat (satu iklan) | AdsManager.init() |
AdsManager.start() |
Pre-roll dimuat (VMAP/Aturan iklan) | AdsManager.init() |
AdsManager.init() |
Mid-roll atau post-roll dimuat | Untuk iklan ke-1 dalam jeda iklan, 8 detik sebelum waktu mulai iklan. Untuk iklan berturut-turut, saat iklan sebelumnya mulai diputar. | Pada waktu mulai iklan. |
FAQ
- Apakah pramuat media memuat materi iklan lengkap?
- Tidak, materi iklan biasanya tidak dimuat sepenuhnya saat pemutaran iklan dimulai. Pemuatan data dimaksudkan untuk meningkatkan pengalaman pengguna dengan meminimalkan waktu yang diperlukan untuk memuat iklan. Fitur ini tidak dimaksudkan untuk mendukung penayangan iklan offline.
- Apakah pramuat media perlu diaktifkan untuk VAST iklan serta media?
- Tidak, SDK selalu melakukan pramuat VAST iklan, terlepas dari setelan pramuat ini.