IMA SDK, video reklam öğelerinin önceden yüklenmesini destekler. Reklamlar ile içerik arasında daha sorunsuz bir geçiş sağlamak için SDK entegrasyonunuzda bu özelliği etkinleştirebilirsiniz. Bu kılavuzda, IMA SDK ile medya ön yükleme özelliğini uygulamayla ilgili teknik ayrıntılar ele alınmaktadır.
Ön koşul
Ön yükleme için IMA Android SDK'sının 3.17.0 veya sonraki bir sürümü gerekir.
Ön yüklemeyi etkinleştirme
Önceden yüklemeyi etkinleştirmek için önceden yüklemeyi doğru olarak ayarlamak üzereAdsRenderingSettings.setEnablePreloading()
kullanın. Bu işlem, onAdsManagerLoaded()
geri çağırma işlevi içinde yapılmalıdır:
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
Özel VideoAdPlayer ile önceden yüklemeyi destekleme
Android ExoPlayer örnek uygulamasında kullanılan ExoPlayer-IMA uzantısını kullanmanızı öneririz. Entegre edildiğinde ExoPlayer-IMA uzantısı varsayılan olarak ön yüklemeyi etkinleştirir ve yerleşik ön 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 reklamları önceden yüklemeyi desteklemesi için loadAd()
ve playAd()
çağrılarında iletilen AdMediaInfo
nesnelerini takip etmesi ve AdPlayerCallback
çağrılarında doğru AdMediaInfo
'yi eklemesi gerekir. Önceki bir AdMediaInfo
oynatılırken sonraki bir AdMediaInfo
için loadAd()
gerçekleşebileceğinden, bu işlem AdMediaInfo
nesnelerini yönetmek için bir veri yapısı gerektirebilir. 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 ön yükleme uygulamalarını test etme
Özel ön yükleme uygulamalarında, doğru ön yükleme kurulumunu doğrulamak için aşağıdaki uç durumları test etmeniz önerilir:
- Tek reklamdan oluşan videodan önce gösterilen reklam
- 3 reklam kapsülü ön rölümü
- 3 reklam kapsülü ara reklam
- İlk videonun ortasında gösterilen reklam ön yüklenmeye başladıktan sonra ancak oynatılmadan önce ikinci bir videonun ortasında gösterilen reklama gitme
- Videodan sonra gösterilen reklamları oynatma
Zamanlama
Aşağıdaki tabloda, ön yükleme etkinleştirildiğinde reklam yükleme zamanlamasında yapılan değişiklikler özetlenmektedir:
Etkinlik | Önceden Yükleme Özelliği | Önceden yükleme olmadan |
---|---|---|
Reklam VAST istendi | AdsLoader.requestAds() |
AdsLoader.requestAds() |
Videodan önce gösterilen reklam yüklü (tek reklam) | AdsManager.init() |
AdsManager.start() |
Videodan önce gösterilen reklam yüklendi (VMAP/Reklam kuralları) | AdsManager.init() |
AdsManager.init() |
Videonun ortasında veya videodan sonra yüklenir. | Reklam arasının ilk reklamı için reklamın başlama zamanından 8 saniye önce. Art arda yayınlanan reklamlarda, önceki reklam oynatılmaya başladığında. | Reklamın başlangıç zamanında. |
SSS
- Medya önceden yükleme özelliği reklam öğesinin tamamını yüklüyor mu?
- Hayır, reklam oynatmaya başladığında reklam öğesi genellikle tam olarak yüklenmez. Ön 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.
- Medya ön yüklemenin, reklamın VAST'ı ve medyası için etkinleştirilmesi gerekir mi?
- Hayır, SDK bu ön yükleme ayarından bağımsız olarak reklamın VAST'ını her zaman önceden yükler.