El SDK de IMA admite la carga previa de recursos de anuncios de video. Puedes habilitar esta función en la integración del SDK para proporcionar una transición más fluida entre los anuncios y el contenido. En esta guía, se explican los detalles técnicos de la implementación de la precarga de medios con el SDK de IMA.
Requisitos
La carga previa requiere la versión 3.17.0 o posterior del SDK de IMA para Android.
Habilita la precarga
Para habilitar la precarga, usaAdsRenderingSettings.setEnablePreloading()
para establecer la precarga como verdadera. Esto se debe hacer dentro de la devolución de llamada onAdsManagerLoaded()
:
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
Cómo admitir la carga previa con un VideoAdPlayer personalizado
Recomendamos la extensión ExoPlayer-IMA que se usa en la app de ejemplo de ExoPlayer para Android. Cuando se integra, la extensión ExoPlayer-IMA tiene la carga previa habilitada de forma predeterminada y admite la carga previa integrada.
Si implementas la carga previa sin la extensión de ExoPlayer-IMA, se requieren cambios adicionales una vez que se llama a setEnablePreloading()
. Para que un reproductor de video admita la precarga de anuncios, debe hacer un seguimiento de los objetos AdMediaInfo
que se pasan en las llamadas de loadAd()
y playAd()
, y debe incluir el objeto AdMediaInfo
correcto en las llamadas de AdPlayerCallback
. Esto puede requerir una estructura de datos para administrar objetos AdMediaInfo
, dado que loadAd()
para un AdMediaInfo
posterior puede ocurrir mientras se reproduce un AdMediaInfo
anterior. En el siguiente ejemplo, se muestran algunos de los cambios que tal vez debas realizar para que tu app admita la carga previa:
// 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.
}
Cómo probar implementaciones personalizadas de la carga previa
En el caso de las implementaciones de precarga personalizadas, se recomienda probar los siguientes casos extremos para verificar que la configuración de la precarga sea correcta:
- Anuncio previo al video único
- Anuncio previo al video de 3 anuncios
- Grupo de 3 anuncios durante el video
- Buscar un segundo anuncio durante el video después de que el primer anuncio durante el video comenzó a precargarse, pero antes de que se reprodujera
- Reproducción de postroll
Tiempos
En la siguiente tabla, se resumen los cambios en los tiempos de carga de anuncios cuando se habilita la precarga:
Evento | Con precarga | Sin precarga |
---|---|---|
Se solicitó un anuncio VAST | AdsLoader.requestAds() |
AdsLoader.requestAds() |
Se cargó el anuncio previo al video (un solo anuncio). | AdsManager.init() |
AdsManager.start() |
Se cargó el anuncio previo al video (VMAP/reglas de anuncios) | AdsManager.init() |
AdsManager.init() |
Se cargó un anuncio durante el video o al final del video | En el caso del 1ᵉʳ anuncio de una pausa publicitaria, 8 segundos antes de la hora de inicio del anuncio En el caso de los anuncios consecutivos, es el momento en que comienza a reproducirse el anuncio anterior. | En el momento de inicio del anuncio |
Preguntas frecuentes
- ¿La precarga de medios carga la creatividad completa?
- No, por lo general, la creatividad no se carga por completo cuando comienza la reproducción del anuncio. La carga previa tiene como objetivo mejorar la experiencia del usuario, ya que minimiza el tiempo que tarda en cargarse el anuncio. No está diseñado para admitir la publicación de anuncios sin conexión.
- ¿Es necesario habilitar la precarga de medios para el VAST del anuncio y los medios?
- No, el SDK siempre precarga el VAST del anuncio, independientemente de este parámetro de configuración de precarga.