Exoplayer IMA uzantısını kullanmaya başlayın

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.
ziyaret edin.

Ö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:

  1. Android Studio'yu başlatın.
  2. Yeni bir Android Studio projesi başlat'ı seçin.
  3. Projenizi seçin sayfasında Boş Etkinlik şablonunu seçin.
  4. İleri'yi tıklayın.
  5. Projenizi yapılandırın sayfasında projenize bir ad verin ve dil olarak Java'yı seçin.
  6. 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.

app/build.gradle
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ı.

app/src/main/res/layout/activity_main.xml
<?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.

app/src/main/res/values/strings.xml
<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.

app/src/main/java/com/example/project name/MainActivity.java

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.

app/src/main/java/com/example/project name/MainActivity.java

...

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.

app/src/main/java/com/example/project name/MainActivity.java
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
ziyaret edin. app/src/main/java/com/example/project name/MainActivity.java
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.