IMA SDK, video reklam öğelerinin önceden yüklenmesini destekler. Reklamlar ve içerik arasında daha sorunsuz bir geçiş sağlamak için bu özelliği SDK entegrasyonunuzda etkinleştirebilirsiniz. Bu kılavuzda, IMA SDK ile medya önceden yükleme özelliğini uygulama ile ilgili teknik ayrıntılar ele alınmaktadır.
Ön koşul
Önceden yükleme için IMA Android SDK'nın 3.17.0 veya sonraki sürümleri gerekir.
Önceden yüklemeyi etkinleştirme
Önceden yüklemeyi etkinleştirmek içinAdsRenderingSettings.setEnablePreloading()
kullanarak önceden yüklemeyi doğru olarak ayarlayın. Bu işlem, onAdsManagerLoaded()
geri çağırma içinde yapılmalıdır:
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
Özel bir VideoAdPlayer ile önceden yüklemeyi destekleme
Android ExoPlayer örnek uygulamasında kullanılan ExoPlayer-IMA uzantısını öneririz. Entegre edildiğinde, ExoPlayer-IMA uzantısında önceden yükleme varsayılan olarak etkindir ve yerleşik önceden yükleme desteği içerir.
Ön yüklemeyi ExoPlayer-IMA uzantısı olmadan uyguluyorsanız setEnablePreloading()
çağrıldıktan sonra ek değişiklikler yapmanız gerekir. Bir video oynatıcının reklam önceden yüklemeyi desteklemesi için loadAd()
ve playAd()
'den gelen çağrılarda iletilen AdMediaInfo
nesnelerini takip etmesi ve AdPlayerCallback
çağrılarında doğru AdMediaInfo
'yı içermesi gerekir. Önceki bir AdMediaInfo
oynatılırken sonraki bir AdMediaInfo
için loadAd()
oluşabileceğinden, AdMediaInfo
nesnelerini yönetmek için bir veri yapısı gerekebilir. Aşağıdaki örnekte, uygulamanızın ön yüklemeyi desteklemesi için yapmanız gerekebilecek bazı değişiklikler gösterilmektedir:
// 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.
}
Özel önceden yükleme uygulamalarını test etme
Özel önceden yükleme uygulamalarında, doğru bir önceden yükleme kurulumunu doğrulamak için aşağıdaki uç durumların test edilmesi önerilir:
- Tek reklamlı videodan önce gösterilen reklam
- 3 reklamlı kapsül videodan önce gösterilen reklam
- 3 reklamlı kapsül ara reklamı
- İlk videonun ortasında gösterilen reklam önceden yüklenmeye başladıktan sonra ancak oynatılmadan önce ikinci videonun ortasında gösterilen reklama gitme
- Videodan sonra oynatma
Zamanlama
Aşağıdaki tabloda, önceden yükleme etkinleştirildiğinde reklam yükleme zamanlamasındaki değişiklikler özetlenmektedir:
Etkinlik | Önceden Yükleme Özellikli | Önceden Yükleme Olmadan |
---|---|---|
İstenen reklam VAST'ı | AdsLoader.requestAds() |
AdsLoader.requestAds() |
Videodan önce gösterilen reklam yüklendi (tek reklam) | AdsManager.init() |
AdsManager.start() |
Videonun başında gösterilen reklam yüklendi (VMAP/Reklam kuralları) | AdsManager.init() |
AdsManager.init() |
Videonun ortasında veya videodan sonra gösterilen reklam yüklendi | Reklam arasının ilk reklamı için reklamın başlangıç zamanından 8 saniye önce. Ardışık reklamlarda, önceki reklam oynatılmaya başladığında. | Reklam başlangıç zamanında. |
SSS
- Medya önceden yükleme, reklam öğesinin tamamını yükler mi?
- Hayır, reklam oynatma başladığında reklam öğesi genellikle tam olarak yüklenmez. Önceden yükleme, reklamın yüklenmesi için gereken süreyi en aza indirerek kullanıcı deneyimini iyileştirmeyi amaçlar. Çevrimdışı reklam yayınını desteklemek için tasarlanmamıştır.
- Reklamın VAST'ı ve medya için önceden medya yükleme etkinleştirilmeli mi?
- Hayır, SDK bu önceden yükleme ayarından bağımsız olarak reklamın VAST'ını her zaman önceden yükler.