Doğal gelişmiş

NativeAd görüntüleme

Bir doğal reklam yüklendiğinde Google Mobile Ads SDK'sı, ilgili reklam biçimi için dinleyiciyi çağırır. Ardından, reklamı göstermek uygulamanızın sorumluluğundadır ancak bunu hemen yapması gerekmez. Sistem tanımlı reklam biçimlerini göstermeyi kolaylaştırmak için SDK, aşağıda açıklanan bazı yararlı kaynaklar sunar.

NativeAdView sınıf

NativeAd biçimi için karşılık gelen NativeAdView sınıfı vardır. Bu sınıf, yayıncıların NativeAd için kök olarak kullanması gereken bir ViewGroup sınıfıdır. Tek bir NativeAdView, tek bir yerel reklama karşılık gelir. Bu reklamın öğelerini görüntülemek için kullanılan her görünüm (ör. ekran görüntüsü öğesini görüntüleyen ImageView), NativeAdView nesnesinin bir alt öğesi olmalıdır.

Öğe görünümlerini görüntülemek için LinearLayout kullanan bir yerel reklamın görünüm hiyerarşisi şu şekilde görünebilir:

<com.google.android.gms.ads.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical">
        <LinearLayout
        android:orientation="horizontal">
          <ImageView
           android:id="@+id/ad_app_icon" />
          <TextView
            android:id="@+id/ad_headline" />
         </LinearLayout>
         <!--Add remaining assets such as the image and media view.-->
    </LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>

Aşağıda, bir NativeAdView oluşturup NativeAd ile dolduran bir örnek verilmiştir:

Java

AdLoader.Builder builder = new AdLoader.Builder(this, "/21775744923/example/native")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Assumes you have a placeholder FrameLayout in your View layout
            // (with ID fl_adplaceholder) where the ad is to be placed.
            FrameLayout frameLayout =
                findViewById(R.id.fl_adplaceholder);
            // Assumes that your ad layout is in a file call native_ad_layout.xml
            // in the res/layout folder
            NativeAdView adView = (NativeAdView) getLayoutInflater()
                .inflate(R.layout.native_ad_layout, null);
            // This method sets the assets into the ad view.
            populateNativeAdView(nativeAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
});

Kotlin

val builder = AdLoader.Builder(this, "/21775744923/example/native")
    .forNativeAd { nativeAd ->
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with ID fl_adplaceholder) where the ad is to be placed.
        val frameLayout: FrameLayout = findViewById(R.id.fl_adplaceholder)
        // Assumes that your ad layout is in a file call native_ad_layout.xml
        // in the res/layout folder
        val adView = layoutInflater
                .inflate(R.layout.native_ad_layout, null) as NativeAdView
        // This method sets the assets into the ad view.
        populateNativeAdView(nativeAd, adView)
        frameLayout.removeAllViews()
        frameLayout.addView(adView)
    }

Belirli bir doğal reklama ait tüm öğelerin NativeAdView düzeninde oluşturulması gerektiğini unutmayın. Google Mobile Ads SDK'sı, yerel reklam öğeleri yerel reklam görünümü düzeninin dışında oluşturulduğunda uyarı kaydetmeye çalışır.

Reklam görüntüleme sınıfları, her bir öğe için kullanılan görüntülemeyi kaydetmek üzere kullanılan yöntemler ve NativeAd nesnesinin kendisini kaydetmek için kullanılan bir yöntem de sağlar. Görüntülemelerin bu şekilde kaydedilmesi, SDK'nın aşağıdaki gibi görevleri otomatik olarak işlemesine olanak tanır:

  • Tıklamaları kaydetme
  • İlk piksel ekranda göründüğünde gösterimleri kaydetme
  • Yerel doldurma reklam öğeleri için AdChoices yer paylaşımını görüntüleme (şu anda belirli bir yayıncı grubuyla sınırlıdır)

Reklam Seçenekleri yer paylaşımı

Bir doldurma reklamı döndürüldüğünde SDK tarafından reklam görüntüleme olarak bir Reklam Seçenekleri yer paylaşımı eklenir. Uygulamanız doğal reklam doldurma özelliğini kullanıyorsa doğal reklam görüntülemenizin tercih ettiğiniz köşesinde otomatik olarak eklenen AdChoices logosu için yer bırakın. Ayrıca, Reklam Seçenekleri yer paylaşımının görülebilmesi önemli olduğundan arka plan renklerini ve resimleri uygun şekilde seçin. Yer paylaşımının görünümü ve işlevi hakkında daha fazla bilgi için programatik doğal reklam uygulama yönergelerine bakın.

Programatik doğal reklamlar için reklam ilişkilendirme

Programatik doğal reklamlar gösterirken, görünümün reklam olduğunu belirtmek için bir reklam ilişkilendirmesi göstermeniz gerekir. Daha fazla bilgi için politika yönergelerimizi inceleyin.

Kod örneği

Yerel reklam gösterme adımları şunlardır:

  1. NativeAdView sınıfının bir örneğini oluşturun.
  2. Gösterilecek her reklam öğesi için:

    1. Öğe görünümünü reklam nesnesindeki öğeyle doldurun.
    2. Öğe görünümünü NativeAdView sınıfına kaydedin.
  3. Yerel reklam düzeniniz büyük bir medya öğesi içeriyorsa MediaView öğesini kaydedin.

  4. Reklam nesnesini NativeAdView sınıfına kaydedin.

NativeAd gösteren örnek bir işlevi aşağıda bulabilirsiniz:

Java

private void displayNativeAd(ViewGroup parent, NativeAd ad) {

  // Inflate a layout and add it to the parent ViewGroup.
  LayoutInflater inflater = (LayoutInflater) parent.getContext()
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  NativeAdView adView = (NativeAdView) inflater
          .inflate(R.layout.ad_layout_file, parent);

  // Locate the view that will hold the headline, set its text, and call the
  // NativeAdView's setHeadlineView method to register it.
  TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
  headlineView.setText(ad.getHeadline());
  adView.setHeadlineView(headlineView);

  // Repeat the process for the other assets in the NativeAd
  // using additional view objects (Buttons, ImageViews, etc).

  // If the app is using a MediaView, it should be
  // instantiated and passed to setMediaView. This view is a little different
  // in that the asset is populated automatically, so there's one less step.
  MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
  adView.setMediaView(mediaView);

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad);

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews();

  // Place the AdView into the parent.
  parent.addView(adView);
}

Kotlin

fun displayNativeAd(parent: ViewGroup, ad: NativeAd) {

  // Inflate a layout and add it to the parent ViewGroup.
  val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
          as LayoutInflater
  val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView

  // Locate the view that will hold the headline, set its text, and use the
  // NativeAdView's headlineView property to register it.
  val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
  headlineView.text = ad.headline
  adView.headlineView = headlineView

  // Repeat the process for the other assets in the NativeAd using
  // additional view objects (Buttons, ImageViews, etc).

  val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
  adView.mediaView = mediaView

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad)

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews()

  // Place the AdView into the parent.
  parent.addView(adView)
}

Görevler şunlardır:

  1. Düzeni şişirme

    Java

    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeAdView adView = (NativeAdView) inflater
            .inflate(R.layout.ad_layout_file, parent);
    

    Kotlin

    val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
            as LayoutInflater
    val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView
    

    Bu kod, doğal reklam görüntüleme görünümlerini içeren bir XML düzenini şişirir ve ardından NativeAdView referansını bulur. Parçanızda veya etkinliğinizde mevcut bir NativeAdView varsa bunu yeniden kullanabileceğinizi ya da düzen dosyası kullanmadan dinamik olarak bir örnek oluşturabileceğinizi unutmayın.

  2. Öğe görünümlerini doldurma ve kaydetme

    Bu örnek kod, başlığı görüntülemek için kullanılan görünümü bulur, reklam nesnesi tarafından sağlanan dize öğesini kullanarak metnini ayarlar ve NativeAdView nesnesine kaydeder:

    Java

    TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
    headlineView.setText(ad.getHeadline());
    adView.setHeadlineView(headlineView);
    

    Kotlin

    val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
    headlineView.text = ad.headline
    adView.headlineView = headlineView
    

    Görünümü bulma, değerini ayarlama ve reklam görüntüleme sınıfına kaydetme işlemi, uygulamanın görüntüleyeceği doğal reklam nesnesi tarafından sağlanan her öğe için tekrarlanmalıdır.

  3. Herkese açık kullanıcı adı tıklamaları

    Doğal reklam görünümünün üzerinde veya içinde herhangi bir özel tıklama işleyicisi uygulamayın. Önceki bölümde açıklandığı gibi, öğe görünümlerini doğru şekilde doldurup kaydettiğiniz sürece reklam görüntüleme öğelerindeki tıklamalar SDK tarafından işlenir.

    Tıklamaları dinlemek için Google Mobile Ads SDK tıklama geri çağırma işlevini uygulayın:

    Java

    AdLoader adLoader = new AdLoader.Builder(context, "/21775744923/example/native")
        // ...
        .withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
                // Handle the failure by logging.
            }
            @Override
            public void onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build();
    

    Kotlin

    val adLoader = AdLoader.Builder(this, "/21775744923/example/native")
        // ...
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(adError: LoadAdError) {
                // Handle the failure.
            }
            override fun onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build()
    
  4. MediaView'i kaydetme

    Yerel reklamınızın düzenine ana resim öğesi eklemek istiyorsanız ImageView öğesi yerine MediaView öğesini kullanmanız gerekir.

    MediaView, ana medya öğesini (video veya resim) göstermek için tasarlanmış özel bir View'tir.

    MediaView, XML düzeninde tanımlanabilir veya dinamik olarak oluşturulabilir. Diğer tüm öğe görünümleri gibi bir NativeAdView öğesinin görünüm hiyerarşisi içine yerleştirilmelidir. MediaView kullanan uygulamalar, MediaView'yi NativeAdView'a kaydettirmelidir:

    Java

     // Populate and register the media asset view.
     nativeAdView.setMediaView(nativeAdBinding.adMedia);
    

    Kotlin

     // Populate and register the media asset view.
     nativeAdView.mediaView = nativeAdBinding.adMedia
    

    ImageScaleType

    MediaView sınıfı, resimler gösterilirken ImageScaleType özelliğine sahiptir. Bir resmin MediaView'te ölçeklendirme şeklini değiştirmek istiyorsanız MediaView'nin setImageScaleType() yöntemini kullanarak ilgili ImageView.ScaleType'yi ayarlayın:

    Java

    mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
    

    Kotlin

    mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP
    

    MediaContent

    MediaContent sınıfı, doğal reklamın medya içeriğiyle ilgili verileri içerir. Bu veriler MediaView sınıfı kullanılarak gösterilir. MediaView mediaContent özelliği MediaContent örneğiyle ayarlandığında:

    • Mevcut bir video öğesi varsa arabelleğe alınır ve MediaView içinde oynatılmaya başlar. Bir video öğesinin kullanılabilir olup olmadığını hasVideoContent() kontrol ederek öğrenebilirsiniz.

    • Reklam video öğesi içermiyorsa mainImage öğesi indirilir ve bunun yerine MediaView içine yerleştirilir.

    Varsayılan olarak, mainImage ilk indirilen resim öğesidir. setReturnUrlsForImageAssets(true) kullanılıyorsa mainImage null olur ve mainImage mülkünü manuel olarak indirdiğiniz resme ayarlamanız gerekir. Bu resmin yalnızca video öğesi olmadığında kullanılacağını unutmayın.

  5. Doğal reklam nesnesini kaydetme

    Bu son adımda, doğal reklam nesnesi gösterilmekten sorumlu görünüme kaydedilir.

    Java

    adView.setNativeAd(ad);
    

    Kotlin

    adView.setNativeAd(ad)
    

Reklamı yok etme

Yerel reklamınızı göstermeyi bitirdiğinizde, reklamın düzgün bir şekilde çöp toplanması için reklamı yok etmeniz gerekir.

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

Yerel reklam kodunu test etme

Doğrudan satılan reklamlar

Doğrudan satılan yerel reklamların nasıl olduğunu test etmek istiyorsanız şu Ad Manager reklam birimi kimliğini kullanabilirsiniz:

/21775744923/example/native

Örnek uygulama yükleme ve içerik reklamlarının yanı sıra aşağıdaki öğeleri içeren özel bir yerel reklam biçimi yayınlamak için yapılandırılmıştır:

  • Başlık (metin)
  • MainImage (resim)
  • Caption (text) (Altyazı [metin])

Özel doğal reklam biçiminin şablon kimliği 10063170'tür.

Yerel dolgu reklamlar

Ad Exchange geri doldurma özelliği, belirli bir yayıncı grubuyla sınırlıdır. Yerel yedek reklamların davranışını test etmek için aşağıdaki Ad Manager reklam birimini kullanın:

/21775744923/example/native-backfill

Reklam Seçenekleri yer paylaşımını içeren örnek uygulama yükleme ve içerik reklamları yayınlar.

Kodunuzu, yayınlanmadan önce gerçek reklam birimi ve şablon kimliklerinizi referans alacak şekilde güncellemeyi unutmayın.

GitHub'daki örnekler

Doğal reklam örneğinin eksiksiz uygulaması:

Java Kotlin

Sonraki adımlar

Aşağıdaki konuları inceleyin: