IMA SDK'ları, multimedya reklamlarını web sitelerinize ve uygulamalarınıza entegre etmenizi kolaylaştırır. IMA SDK'ları herhangi birinden reklam iste VAST uyumlu reklam sunucusu oluşturup uygulamalarınızda reklam oynatmayı yönetin. IMA istemci taraflı SDK'larla SDK, reklam oynatmayı işlerken içerik videosunun oynatılmasını siz kontrol edersiniz. Reklamlar: uygulamanın içerik video oynatıcısının üzerine yerleştirilmiş ayrı bir video oynatıcı.
Bu kılavuzda, ExoPlayer IMA uzantısı. Tamamlanmış bir örnek entegrasyonu görüntülemek veya izlemek isterseniz BasicExample (GitHub'dan).
IMA istemci tarafına genel bakış
IMA istemci tarafını uygulamak için aşağıdaki dört ana SDK bileşenini içerir: kılavuz:
AdDisplayContainer
: Reklamların oluşturulduğu kapsayıcı nesne.AdsLoader
: Reklam isteyen ve reklam isteği yanıtlarından gelen etkinlikleri işleyen nesne. Yalnızca uygulamanın ömrü boyunca yeniden kullanılabilecek bir reklam yükleyicisi örneklendirir.AdsRequest
: Reklam isteğini tanımlayan bir nesne. Reklam istekleri, VAST reklam etiketi URL'sinin yanı sıra ek parametrelere (reklam boyutları gibi) sahip olabilir.AdsManager
: Reklam isteğinin yanıtını içeren, reklam oynatmayı kontrol eden ve reklamı dinleyen bir nesne etkinliklerdir.
Ön koşullar
Başlamadan önce, Android Studio 3.0 veya sonraki sürümler.
1. Yeni Android Studio projesi oluştur
Android Studio projenizi oluşturmak için aşağıdaki adımları tamamlayın:
- Android Studio'yu başlatın.
- Yeni bir Android Studio projesi başlat'ı seçin.
- Projenizi seçin sayfasında Boş Etkinlik şablonunu seçin.
- İleri'yi tıklayın.
- Projenizi yapılandırın sayfasında projenize bir ad verin ve dil olarak Java'yı seçin.
- Son'u tıklayın.
2. ExoPlayer IMA uzantısını projenize ekleme
Öncelikle uygulama düzeyindeki build.gradle dosyasında uzantı için içe aktarmaları
bağımlılıkları bölümümüzden bahsedeceğiz. ExoPlayer IMA uzantısının boyutu nedeniyle,
tıklayın. Bu, minSdkVersion
20 veya daha düşük bir değere ayarlanmış uygulamalar için gereklidir.
Ayrıca, Java sürümü uyumluluk bilgilerini belirtmek için yeni compileOptions
ekleyin.
android { namespace 'com.google.ads.interactivemedia.v3.samples.exoplayerexample' compileSdkVersion 34 compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } } defaultConfig { applicationId "com.google.ads.interactivemedia.v3.samples.exoplayerexample" minSdkVersion 21 targetSdkVersion 34 multiDexEnabled true versionCode 1 versionName "1.0" } ... } dependencies { implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.media3:media3-ui:1.3.1' implementation 'androidx.media3:media3-exoplayer:1.3.1' implementation 'androidx.media3:media3-exoplayer-ima:1.3.1' ... }
Reklam isteğinde bulunmak için IMA SDK'nın gerektirdiği kullanıcı izinlerini ekleyin.
app/src/main/AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.project name"> <!-- Required permissions for the IMA SDK --> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ... </manifest>
Amaç bildirimleri ekleyin
Uygulamanız Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsa IMA SDK, web bağlantılarını açmak için açık bir niyet beyanı gerektirir. Aşağıdaki snippet'i şuraya ekleyin: reklam tıklamalarını etkinleştirmek için uygulamanızın manifest dosyasını (Daha fazla bilgi düğmesi).<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.project name"> ... </application> <queries> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" /> </intent> </queries> </manifest>
3. Reklam kullanıcı arayüzü kapsayıcısını oluşturma
Bir StyledPlayerView
oluşturarak ExoPlayer PlayerView olarak kullanılacak görünümü oluşturun
uygun bir kimlikle değiştirin. Ayrıca
androidx.constraintlayout.widget.ConstraintLayout
bir LinearLayout
ile paylaşıldı.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.media3.ui.PlayerView android:id="@+id/player_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
4. Reklam isteği için içerik URL'nizi ve reklam etiketi URL'nizi ekleyin
İçerik URL'nizi ve VAST reklam etiketi URL'nizi depolamak için strings.xml
öğesine girişler ekleyin.
<resources> <string name="app_name">Your_Project_Name</string> <string name="content_url"><![CDATA[https://storage.googleapis.com/gvabox/media/samples/stock.mp4]]></string> <string name="ad_tag_url"><![CDATA[https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=]]></string> </resources>
5. ExoPlayer IMA uzantısını içe aktarma
ExoPlayer uzantısı için içe aktarma ifadelerini ekleyin. Ardından,
MainActivity
sınıfının kapsamını Activity
genişletmek için özel değişkenler ekleyerek
PlayerView
, SimpleExoPlayer
ve ImaAdsLoader
.
import android.app.Activity; import android.net.Uri; import android.os.Bundle; import androidx.media3.common.MediaItem; import androidx.media3.common.util.Util; import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DefaultDataSource; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.ima.ImaAdsLoader; import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.ui.PlayerView; import androidx.multidex.MultiDex; ... public class MainActivity extends Activity { private PlayerView playerView; private ExoPlayer player; private ImaAdsLoader adsLoader; }
6. adsLoader
örneği oluşturun
Yeni bir değer oluşturmak için onCreate
yönteminin üzerine yazın ve gerekli değişken atamalarını ekleyin.
yeni adsLoader
nesnesini tanımlayın.
... public class MainActivity extends Activity { private PlayerView playerView; private ExoPlayer player; private ImaAdsLoader adsLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MultiDex.install(this); playerView = findViewById(R.id.player_view); // Create an AdsLoader. adsLoader = new ImaAdsLoader.Builder(/* context= */ this) .setAdEventListener(buildAdEventListener()) .build(); } public AdEvent.AdEventListener buildAdEventListener() { AdEvent.AdEventListener imaAdEventListener = event -> { AdEvent.AdEventType eventType = event.getType(); // Log IMA events for debugging. // The ExoPlayer IMA extension already handles IMA events and does not need anything // additional here to function. }; return imaAdEventListener; } }
7. Oynatıcıyı başlatma ve bırakma
Oynatıcıyı başlatma ve bırakma yöntemleri ekleyin. İlk kullanıma hazırlama sırasında
yöntemini kullanıyorsanız SimpleExoPlayer
. Ardından, AdsMediaSource
oluşturun
oynatıcıya ayarlayacağım.
public class MainActivity extends Activity { ... private void releasePlayer() { adsLoader.setPlayer(null); playerView.setPlayer(null); player.release(); player = null; } private void initializePlayer() { // Set up the factory for media sources, passing the ads loader and ad view providers. DataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(this); MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(dataSourceFactory) .setLocalAdInsertionComponents(unusedAdTagUri -> adsLoader, playerView); // Create an ExoPlayer and set it as the player for content and ads. player = new ExoPlayer.Builder(this).setMediaSourceFactory(mediaSourceFactory).build(); playerView.setPlayer(player); adsLoader.setPlayer(player); // Create the MediaItem to play, specifying the content URI and ad tag URI. Uri contentUri = Uri.parse(getString(R.string.content_url)); Uri adTagUri = Uri.parse(getString(R.string.ad_tag_url)); MediaItem mediaItem = new MediaItem.Builder() .setUri(contentUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build(); // Prepare the content and ad to be played with the SimpleExoPlayer. player.setMediaItem(mediaItem); player.prepare(); // Set PlayWhenReady. If true, content and ads will autoplay. player.setPlayWhenReady(false); } }
8. Oyuncu etkinliklerini işleme
Son olarak, oynatıcının yaşam döngüsü etkinlikleri için geri çağırmalar oluşturun:
onStart
onResume
onStop
onPause
onDestroy
public class MainActivity extends Activity { private PlayerView playerView; private SimpleExoPlayer player; private ImaAdsLoader adsLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); playerView = findViewById(R.id.player_view); // Create an AdsLoader. adsLoader = new ImaAdsLoader.Builder(/* context= */ this) .setAdEventListener(buildAdEventListener()) .build(); } @Override public void onStart() { super.onStart(); // if (Util.SDK_INT > 23) { initializePlayer(); if (playerView != null) { playerView.onResume(); } } } @Override public void onResume() { super.onResume(); if (Util.SDK_INT <= 23 || player == null) { initializePlayer(); if (playerView != null) { playerView.onResume(); } } } @Override public void onPause() { super.onPause(); if (Util.SDK_INT <= 23) { if (playerView != null) { playerView.onPause(); } releasePlayer(); } } @Override public void onStop() { super.onStop(); if (Util.SDK_INT > 23) { if (playerView != null) { playerView.onPause(); } releasePlayer(); } } @Override protected void onDestroy() { super.onDestroy(); adsLoader.release(); } ... }
İşte bu kadar. Artık IMA SDK ile reklam istiyor ve görüntülüyorsunuz. Ek bilgiler hakkında hakkında daha fazla bilgi edinmek için diğer kılavuzlara veya GitHub'daki örnekler.