IMA 3.30.0 ve önceki sürümlerde, IMA SDK tüm reklam oynatma mantığını ve uygulamanız içerik videosunu oynatmaya odaklanır. Bu yaklaşıma "SDK'ya ait reklam oynatma".
Video oynatıcınızda reklam oynatmak istiyorsanız SDK, bunun için bir arayüz sağlar. Bu yaklaşıma “özel” reklam oynatma" Bu kılavuzun geri kalanında uygulama açıklanmaktadır.
Ön koşullar
- Temel bir IMA entegrasyonu.
Şunu incelemenizi öneririz: Gelişmiş Örnek temel bir IMA'nız yoksa, başlangıç noktası olarak gitHub'ı inceleyebilirsiniz. Bu örnekte özel reklam oynatma zaten uygulanmaktadır. Kalan Bu kılavuzun amacı, özel reklam oynatma için gereken özellikleri IMA reklamları.
VideoAdPlayer ile arayüz
Özel reklam oynatma için uygulamanızın
VideoAdPlayer
kullanır. Bu arayüz, SDK tarafından uygulamanıza reklam oynatması için bildirim göndermek amacıyla kullanılır
videolar. Uygulamanız, SDK'yı ana video reklam hakkında bilgilendirmek için de bu arayüzü kullanır
etkinlikler. Arayüzü uygulamak için aşağıdaki adımları izleyin.
VideoAdPlayer Oluşturma
İlk adım anonim bir VideoAdPlayer
sınıfı oluşturmaktır
requestAds()
içinde:
private VideoAdPlayer videoAdPlayer;
...
private void requestAds(String adTagUrl) {
videoAdPlayer = new VideoAdPlayer() {
};
}
Video yöntemleri ekleme
Ardından, video oynatıcınıza reklamı oynatmasını, yüklemesini, durdurmasını ve duraklatmasını söyleyen yöntemler ekleyin videolar. Oynatıcıyı serbest bırakma ve ses düzeyini alma yöntemleri de eklenir:
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();
}
};
Bu yöntemler, video oynatıcınızın kendi benzeri yöntemlerine göz atın. Bu yöntemlerin, bir reklamın gösterilip gösterilmediğini izlemek için Özel reklam oynatmada, video oynatıcı hem içerik videolarını hem de video reklamları oynattığından Şu anda görüntülenen parça.
Reklam oynatma ilerleme durumu
VideoAdPlayer
arayüzü, farklı bir arayüz uygular.
AdProgressProvider
; bu nedenle, onu da uygulamanız gerekir. Yalnızca
SDK tarafından kullanılan bir yöntem olan getAdProgress()
reklamlar için oynatma bilgileri. Anonim VideoAdPlayer
sayfanıza ekleyin
aşağıdaki yöntemlerden birini kullanın:
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()
, VideoProgressUpdate
türünü döndürür.
Videonun mevcut konumundan ve süresinden oluşmalıdır. Oyuncu
bir reklamı oynatmıyor ya da süre bilinmiyorsa geri gelmesini sağlayın
VideoProgressUpdate.VIDEO_TIME_NOT_READY
olarak ayarlanmış olmalıdır.
Görüntülü geri aramaları yönetme
Özel reklam oynatma için uygulamanızın SDK'yı ana makineye bildirmesi gerekir
video etkinlikleri oluşturabilirsiniz. SDK'nın görünümünde oluşturulan geri çağırmalar
VideoAdPlayer.VideoAdPlayerCallback
arayüzünde açıklanmaktadır.
Geri çağırma yöntemlerine geçmeden önce
SDK'nın isteği üzerine geri çağırma ekleyebilir ve kaldırabilir. Bu
VideoAdPlayer
içinde addCallback()
ve removeCallback()
kullanılarak yapıldı:
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);
}
};
Bu uygulama, çağrılacağı geri çağırmalar için bir List<>
kullanır
List<>.add()
ve remove()
yöntemleri.
Geri çağırmaları yapın
Artık SDK, uygulamanıza geri çağırma ekleyip kaldırmasını söyleyebildiğine göre geri çağırmanın çağrıldığı yerleri tanımlayın. Uygulamanızın şu numarayı araması gerekiyor: oynatma, duraklatma, oynatma gibi önemli video etkinlikleri gerçekleştiğinde veya videoyu devam ettirdiğinizde ya da videoda bittiğinde veya hatayla karşılaşıldığında.
Bunu yapmak için SampleVideoPlayer
öğesini genişleterek bunların bir işleyicisi olsun
VideoFragment
kaynağından eklenen video etkinlikleri. Projenin gidişatı boyunca
bu reklam geri çağırmalarını adlandırmak için SampleVideoPlayer
içinde ayrı bir işleyici
SampleVideoPlayer
, reklamlar hakkında hiçbir bilgiye sahip olmadığı için
Bu nedenle, videonun video etkinliklerini reklamlarla ilgilenebilecek bir yere yönlendirmelisiniz.
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);
}
Başlatma, duraklatma ve devam ettirme
Oynatma durumunu takip etmek ve yeni geçersiz kılmalar eklemek için yeni bir sıralama oluşturun
SampleVideoPlayer
içindeki start()
ve pause()
yöntemleri için:
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();
}
}
Hataları işleme
Video oynatıcının init()
içinde ayarladığınız anonim hata işleyicisini geçersiz kılın:
@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;
}
İşleyiciyi uygulama
VideoFragment
sayfasına dönün ve anonim bir OnVideoEventsListener
ekleyin
SampleVideoPlayer
örneğinize ekleyin:
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();
}
}
}
});
OnVideoCompletedListener
öğesinin onVideoCompleted()
yöntemini değiştir
reklam videosunun bittiği duruma göre işlem yapılmalıdır:
public void onVideoCompleted() {
// Handle completed event for playing post-rolls.
if (isAdDisplayed) {
for (VideoAdPlayerCallback callback : adCallbacks) {
callback.onEnded();
}
} else {
if (adsLoader != null) {
adsLoader.contentComplete();
}
}
İçerik ve reklamlar arasında geçiş yapma
Bu örnekte, her iki video oynatıcı da oynatılabilir. Bu yüzden, belirli içerik türleri arasında geçiş yapmak için hakkında daha fazla bilgi edineceksiniz. Daha sonra, sayfayı yeniden yükleyip içerik videosunu kullanabilirsiniz. İki tane ekleyin işlevini kullanın:
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;
}
Bunlar, CONTENT_PAUSE_REQUESTED
ve
Şu aralıkta CONTENT_RESUME_REQUESTED
etkinlik alındı:
Sırasıyla VideoFragment.onAdEvent()
:
case CONTENT_PAUSE_REQUESTED:
pauseContent();
break;
case CONTENT_RESUME_REQUESTED:
resumeContent();
break;
Özel reklam oynatmayı etkinleştirme
Son adım, SDK'ya özel reklam oynatma kullandığınızı bildirmektir.
Bu işlem, AdDisplayContainer
cihazınıza VideoAdPlayer
iletilerek yapılır:
adDisplayContainer.setPlayer(videoAdPlayer);
Oynatıcınızı setPlayer()
adlı kullanıcıya vermeniz gerekiyor. Aksi halde,
SDK, SDK'ya ait oynatma özelliğini kullanır.
Bu kadar basit. Bunlar, uygulamanıza özel reklam oynatma eklemek için gereken tüm adımlardır. IMA uygulaması. Kendi uygulamanızı Gelişmiş Örnek github'da kontrol edin.