Dans la version 3.30.0 et les versions antérieures, le SDK IMA peut gérer l'ensemble de la logique de lecture des annonces, tandis que votre application est axée sur la lecture de contenus vidéo. Cette approche s'appelle "Lecture des annonces appartenant au SDK".
Si vous souhaitez diffuser des annonces dans votre lecteur vidéo, le SDK fournit une interface pour cela. Nous désignons cette approche sous le terme lecture des annonces" et le reste de ce guide sur son implémentation.
Prérequis
- Une intégration IMA de base.
Nous vous recommandons de consulter Exemple avancé sur GitHub comme point de départ si vous ne disposez pas d'un kit IMA de base l'intégration. Cet exemple intègre déjà la lecture d'annonces personnalisées. Les autres les fonctionnalités nécessaires à la lecture d'annonces personnalisées avec les annonces IMA.
Interface avec VideoAdPlayer
La lecture des annonces personnalisées nécessite que votre application implémente la
VideoAdPlayer
de commande. Cette interface permet au SDK de demander à votre application de lire l'annonce
vidéos. Votre application utilise aussi cette interface pour signaler au SDK toute annonce vidéo majeure
événements. Pour implémenter l'interface, procédez comme suit :
Créer un VideoAdPlayer
La première étape consiste à créer une classe VideoAdPlayer
anonyme.
dans requestAds()
:
private VideoAdPlayer videoAdPlayer;
...
private void requestAds(String adTagUrl) {
videoAdPlayer = new VideoAdPlayer() {
};
}
Ajouter des méthodes vidéo
Ajoutez ensuite des méthodes qui indiquent à votre lecteur vidéo de lire, charger, arrêter et mettre en pause l'annonce. vidéos. Nous ajoutons également les méthodes permettant de libérer le lecteur et d'obtenir le volume ici:
videoAdPlayer = new VideoAdPlayer() {
@Override
public void playAd() {
if (mIsAdDisplayed) {
videoPlayer.resume();
} else {
isAdDisplayed = true;
videoPlayer.play();
}
}
@Override
public void loadAd(String url) {
isAdDisplayed = true;
videoPlayer.setVideoPath(url);
}
@Override
public void stopAd() {
videoPlayer.stopPlayback();
}
@Override
public void pauseAd() {
videoPlayer.pause();
}
@Override
public void release() {
// any clean up that needs to be done
}
@Override
public int getVolume() {
return videoPlayer.getVolume();
}
};
Il s'agit de simples wrappers qui englobent les composants similaires de votre lecteur vidéo méthodes. Notez que ces méthodes définissent une variable interne qui est utilisée pour effectuer le suivi de l'affichage d'une annonce. Avec la lecture d'annonces personnalisées, qui lit à la fois les annonces vidéo et celles du réseau de contenu. Vous devez donc maintenir dont le tracé est actuellement affiché.
Progression de la lecture de l'annonce
L'interface VideoAdPlayer
implémente une autre interface,
AdProgressProvider
. Vous devez donc l'implémenter également. Il ne contient
une méthode, getAdProgress()
, qui est utilisée par le SDK pour obtenir
des informations de lecture pour les annonces. Ajoutez-le à votre VideoAdPlayer
anonyme
, en dessous des autres méthodes:
VideoAdPlayer videoAdPlayer = new VideoAdPlayer() {
...
@Override
public VideoProgressUpdate getAdProgress() {
if (!isAdDisplayed || videoPlayer.getDuration() <= 0) {
return VideoProgressUpdate.VIDEO_TIME_NOT_READY;
}
return new VideoProgressUpdate(videoPlayer.getCurrentPosition(),
videoPlayer.getDuration());
}
};
getAdProgress()
renvoie un type VideoProgressUpdate
, qui
doit correspondre à la position et à la durée actuelles de la vidéo. Si le joueur
lorsqu'une annonce n'est pas lue ou si la durée n'est pas disponible, demandez-lui de renvoyer
VideoProgressUpdate.VIDEO_TIME_NOT_READY
, comme illustré dans l'exemple.
Gérer les rappels vidéo
La lecture des annonces personnalisées nécessite que votre application informe le SDK des
des événements vidéo. Du point de vue du SDK, il s'agit de rappels
décrit par l'interface VideoAdPlayer.VideoAdPlayerCallback
.
Avant d'aborder les méthodes de rappel, vous devez
en mesure d'ajouter et de supprimer
les rappels à la demande du SDK. C'est
effectué dans VideoAdPlayer
à l'aide de addCallback()
et removeCallback()
:
private List<VideoAdPlayerCallback> adCallbacks = new ArrayList<>(1);
VideoAdPlayer videoAdPlayer = new VideoAdPlayer() {
...
@Override
public void addCallback(VideoAdPlayerCallback videoAdPlayerCallback) {
adCallbacks.add(videoAdPlayerCallback);
}
@Override
public void removeCallback(VideoAdPlayerCallback videoAdPlayerCallback) {
adCallbacks.remove(videoAdPlayerCallback);
}
};
Cette implémentation utilise un List<>
pour les rappels sur lesquels appeler
les méthodes List<>.add()
et remove()
.
Appeler les rappels
Maintenant que le SDK peut indiquer à votre application d'ajouter et de supprimer des rappels, définir les endroits où le rappel est appelé. Votre application doit appeler ces rappels lorsque des événements vidéo importants se produisent, comme la lecture, la mise en pause une vidéo, la reprise d'une vidéo, l'arrêt d'une vidéo ou la lecture d'une erreur.
Pour ce faire, développez SampleVideoPlayer
afin d'avoir un écouteur pour ces
événements vidéo ajoutés depuis VideoFragment
. La raison de
faire que
Un écouteur distinct dans SampleVideoPlayer
pour appeler ces rappels d'annonce
est que SampleVideoPlayer
ne s'y connaît pas du tout au sujet des annonces.
Vous devez donc transférer ses événements vidéo
à un service capable de gérer les annonces.
public interface OnVideoEventsListener {
void onPlay();
void onResume();
void onPause();
void onError();
}
private final List<OnVideoEventsListener> onVideoEventsListeners = new ArrayList<>(1);
public void addVideoEventsListener(OnVideoEventsListener listener) {
onVideoEventsListeners.add(listener);
}
Démarrer, mettre en pause et reprendre
Créer une énumération pour suivre l'état de la lecture et ajouter de nouveaux forçages
Pour les méthodes start()
et pause()
dans SampleVideoPlayer
:
private enum PlaybackState {
STOPPED, PAUSED, PLAYING
}
private PlaybackState playbackState = PlaybackState.STOPPED;
@Override
public void start() {
super.start();
switch (playbackState) {
case STOPPED:
for (OnVideoEventsListener listener : onVideoEventsListeners) {
listener.onPlay();
}
break;
case PAUSED:
for (OnVideoEventsListener listener : onVideoEventsListeners) {
listener.onResume();
}
break;
default:
// Already playing; do nothing.
break;
}
playbackState = PlaybackState.PLAYING;
}
@Override
public void pause() {
super.pause();
playbackState = PlaybackState.PAUSED;
for (OnVideoEventsListener listener : onVideoEventsListeners) {
listener.onPause();
}
}
Gérer les erreurs
Ignorez l'écouteur d'erreurs anonymes du lecteur vidéo que vous avez défini dans init()
:
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
playbackState = PlaybackState.STOPPED;
for (OnVideoEventsListener listener : onVideoEventsListeners) {
listener.onError();
}
// Returning true signals to MediaPlayer that the error was handled.
// This prevents the completion handler from being called.
return true;
}
Implémenter l'écouteur
Revenez à VideoFragment
et ajoutez un OnVideoEventsListener
anonyme
à votre instance SampleVideoPlayer
:
mVideoPlayer.addVideoEventsListener(new OnVideoEventsListener() {
@Override
public void onPlay() {
if (isAdDisplayed) {
for (VideoAdPlayerCallback callback : adCallbacks) {
callback.onPlay();
}
}
}
@Override
public void onResume() {
if (isAdDisplayed) {
for (VideoAdPlayerCallback callback : adCallbacks) {
callback.onResume();
}
}
}
@Override
public void onPause() {
if (isAdDisplayed) {
for (VideoAdPlayerCallback callback : adCallbacks) {
callback.onPause();
}
}
}
@Override
public void onError() {
if (isAdDisplayed) {
for (VideoAdPlayerCallback callback : adCallbacks) {
callback.onError();
}
}
}
});
Modifiez la méthode onVideoCompleted()
de OnVideoCompletedListener
.
pour gérer le cas où une vidéo publicitaire est terminée:
public void onVideoCompleted() {
// Handle completed event for playing post-rolls.
if (isAdDisplayed) {
for (VideoAdPlayerCallback callback : adCallbacks) {
callback.onEnded();
}
} else {
if (adsLoader != null) {
adsLoader.contentComplete();
}
}
Basculer entre le contenu et les annonces
Cet exemple utilise la même instance du lecteur vidéo pour lire à la fois le contenu et les annonces. Vous devez donc ajouter une logique du contenu et des annonces dans votre lecteur. Vous pouvez ensuite recharger la page et rechercher pour revenir au point où l'annonce a commencé. Ajouter deux pour effectuer cette opération:
private int savedContentPosition = 0;
private void pauseContent() {
savedContentPosition = videoPlayer.getCurrentPosition();
videoPlayer.stopPlayback();
isAdDisplayed = true;
}
private void resumeContent() {
videoPlayer.setVideoPath(getString(R.string.content_url));
videoPlayer.seekTo(mSavedContentPosition);
videoPlayer.play();
isAdDisplayed = false;
}
Elles sont appelées lorsque CONTENT_PAUSE_REQUESTED
et
CONTENT_RESUME_REQUESTED
événements sont reçus dans
VideoFragment.onAdEvent()
, respectivement:
case CONTENT_PAUSE_REQUESTED:
pauseContent();
break;
case CONTENT_RESUME_REQUESTED:
resumeContent();
break;
Activer la lecture des annonces personnalisées
La dernière étape consiste à indiquer au SDK que vous utilisez la lecture d'annonces personnalisées.
Pour ce faire, transmettez un VideoAdPlayer
à votre AdDisplayContainer
:
adDisplayContainer.setPlayer(videoAdPlayer);
Vous devez transmettre votre lecteur à setPlayer()
. Dans le cas contraire,
Le SDK utilise la lecture qui lui appartient.
Et voilà ! Vous connaissez maintenant la procédure à suivre pour activer la lecture d'annonces personnalisées implémentation d'IMA. Vous pouvez comparer votre propre implémentation avec Exemple avancé sur GitHub si vous rencontrez un problème.