Yerel reklamlar

Platform seçin: Android iOS Android (Eski)

Bir doğal reklam yüklendiğinde GMA Next-Gen SDK, ilgili reklam biçimi için dinleyiciyi çağırır. Ardından uygulamanız reklamı göstermekten sorumlu olur ancak bunu hemen yapması gerekmez. Sistem tarafından tanımlanan reklam biçimlerinin gösterilmesini kolaylaştırmak için SDK, aşağıda açıklandığı gibi bazı yararlı kaynaklar sunar.

NativeAdView sınıfını tanımlama

NativeAdView sınıfı tanımlayın. Bu sınıf bir ViewGroup sınıfıdır ve NativeAdView sınıfı için üst düzey kapsayıcıdır. Her doğal reklam görünümü, NativeAdView nesnesinin alt öğesi olması gereken MediaView görünüm öğesi veya Title görünüm öğesi gibi doğal reklam öğeleri içerir.

XML Düzeni

Projenize bir XML NativeAdView ekleyin:

<com.google.android.libraries.ads.mobile.sdk.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.libraries.ads.mobile.sdk.nativead.NativeAdView>

Jetpack Compose

  1. JetpackCompose Utilities klasörünü ekleyin. Bu klasörde, NativeAdView nesnesini ve öğelerini oluşturmaya yardımcı olan araçlar bulunur.

NativeAdView oluşturun:

  import com.google.android.gms.compose_util.NativeAdAttribution
  import com.google.android.gms.compose_util.NativeAdView

  @Composable
  /** Display a native ad with a user defined template. */
  fun DisplayNativeAdView(nativeAd: NativeAd) {
      NativeAdView {
          // Display the ad attribution.
          NativeAdAttribution(text = context.getString("Ad"))
          // Add remaining assets such as the image and media view.
        }
    }

Yüklenen doğal reklamı işleme

Doğal reklam yüklendiğinde geri çağırma etkinliğini işleyin, doğal reklam görünümünü genişletin ve görünüm hiyerarşisine ekleyin:

Kotlin

// Build an ad request with native ad options to customize the ad.
val adTypes = listOf(NativeAd.NativeAdType.NATIVE)
val adRequest = NativeAdRequest
  .Builder("ca-app-pub-3940256099942544/2247696110", adTypes)
  .build()

val adCallback =
  object : NativeAdLoaderCallback {
    override fun onNativeAdLoaded(nativeAd: NativeAd) {
      activity?.runOnUiThread {

        val nativeAdBinding = NativeAdBinding.inflate(layoutInflater)
        val adView = nativeAdBinding.root
        val frameLayout = myActivityLayout.nativeAdPlaceholder

        // Populate and register the native ad asset views.
        displayNativeAd(nativeAd, nativeAdBinding)

        // Remove all old ad views and add the new native ad
        // view to the view hierarchy.
        frameLayout.removeAllViews()
        frameLayout.addView(adView)
      }
    }
  }

// Load the native ad with our request and callback.
NativeAdLoader.load(adRequest, adCallback)

Java

// Build an ad request with native ad options to customize the ad.
List<NativeAd.NativeAdType> adTypes = Arrays.asList(NativeAd.NativeAdType.NATIVE);
NativeAdRequest adRequest = new NativeAdRequest
                                .Builder("ca-app-pub-3940256099942544/2247696110", adTypes)
                                .build();

NativeAdLoaderCallback adCallback = new NativeAdLoaderCallback() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
      if (getActivity() != null) {
        getActivity()
          .runOnUiThread(() -> {
            // Inflate the native ad view and add it to the view hierarchy.
            NativeAdBinding nativeAdBinding = NativeAdBinding.inflate(getLayoutInflater());
            NativeAdView adView = (NativeAdView) nativeAdBinding.getRoot();
            FrameLayout frameLayout = myActivityLayout.nativeAdPlaceholder;

            // Populate and register the native ad asset views.
            displayNativeAd(nativeAd, nativeAdBinding);

            // Remove all old ad views and add the new native ad
            // view to the view hierarchy.
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        });
      }
    }
};

// Load the native ad with our request and callback.
NativeAdLoader.load(adRequest, adCallback);

Belirli bir doğal reklamın tüm öğelerinin NativeAdView düzeninde oluşturulması gerektiğini unutmayın. GMA Next-Gen SDK, doğal öğeler bir doğal reklam görünümü düzeninin dışında oluşturulduğunda uyarı kaydetmeye çalışır.

Reklam görünümü sınıfları, her bir öğe için kullanılan görünümü ve NativeAd nesnesinin kendisini kaydetmek için kullanılan yöntemler de sağlar. Görünümleri bu şekilde kaydetmek, 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
  • Reklam Seçenekleri yer paylaşımını gösterme

Doğal reklamı gösterme

Aşağıdaki örnekte, doğal reklamın nasıl gösterileceği açıklanmaktadır:

Kotlin

private fun displayNativeAd(nativeAd: NativeAd, nativeAdBinding : NativeAdBinding) {
  // Set the native ad view elements.
  val nativeAdView = nativeAdBinding.root
  nativeAdView.advertiserView = nativeAdBinding.adAdvertiser
  nativeAdView.bodyView = nativeAdBinding.adBody
  nativeAdView.callToActionView = nativeAdBinding.adCallToAction
  nativeAdView.headlineView = nativeAdBinding.adHeadline
  nativeAdView.iconView = nativeAdBinding.adAppIcon
  nativeAdView.priceView = nativeAdBinding.adPrice
  nativeAdView.starRatingView = nativeAdBinding.adStars
  nativeAdView.storeView = nativeAdBinding.adStore

  // Set the view element with the native ad assets.
  nativeAdBinding.adAdvertiser.text = nativeAd.advertiser
  nativeAdBinding.adBody.text = nativeAd.body
  nativeAdBinding.adCallToAction.text = nativeAd.callToAction
  nativeAdBinding.adHeadline.text = nativeAd.headline
  nativeAdBinding.adAppIcon.setImageDrawable(nativeAd.icon?.drawable)
  nativeAdBinding.adPrice.text = nativeAd.price
  nativeAd.starRating?.toFloat().let { value ->
    nativeAdBinding.adStars.rating = value
  }
  nativeAdBinding.adStore.text = nativeAd.store

  // Hide views for assets that don't have data.
  nativeAdBinding.adAdvertiser.visibility = getAssetViewVisibility(nativeAd.advertiser)
  nativeAdBinding.adBody.visibility = getAssetViewVisibility(nativeAd.body)
  nativeAdBinding.adCallToAction.visibility = getAssetViewVisibility(nativeAd.callToAction)
  nativeAdBinding.adHeadline.visibility = getAssetViewVisibility(nativeAd.headline)
  nativeAdBinding.adAppIcon.visibility = getAssetViewVisibility(nativeAd.icon)
  nativeAdBinding.adPrice.visibility = getAssetViewVisibility(nativeAd.price)
  nativeAdBinding.adStars.visibility = getAssetViewVisibility(nativeAd.starRating)
  nativeAdBinding.adStore.visibility = getAssetViewVisibility(nativeAd.store)

  // Inform GMA Next-Gen SDK that you have finished populating
  // the native ad views with this native ad.
  nativeAdView.registerNativeAd(nativeAd, nativeAdBinding.adMedia)
}

/**
* Determines the visibility of an asset view based on the presence of its asset.
*
* @param asset The native ad asset to check for nullability.
* @return [View.VISIBLE] if the asset is not null, [View.INVISIBLE] otherwise.
*/
private fun getAssetViewVisibility(asset: Any?): Int {
  return if (asset == null) View.INVISIBLE else View.VISIBLE
}

Java

private void displayNativeAd(ad: NativeAd, nativeAdBinding : NativeAdBinding) {
  // Set the native ad view elements.
  NativeAdView nativeAdView = nativeAdBinding.getRoot();
  nativeAdView.setAdvertiserView(nativeAdBinding.adAdvertiser);
  nativeAdView.setBodyView(nativeAdBinding.adBody);
  nativeAdView.setCallToActionView(nativeAdBinding.adCallToAction);
  nativeAdView.setHeadlineView(nativeAdBinding.adHeadline);
  nativeAdView.setIconView(nativeAdBinding.adAppIcon);
  nativeAdView.setPriceView(nativeAdBinding.adPrice);
  nativeAdView.setStarRatingView(nativeAdBinding.adStars);
  nativeAdView.setStoreView(nativeAdBinding.adStore);

  // Set the view element with the native ad assets.
  nativeAdBinding.adAdvertiser.setText(nativeAd.getAdvertiser());
  nativeAdBinding.adBody.setText(nativeAd.getBody());
  nativeAdBinding.adCallToAction.setText(nativeAd.getCallToAction());
  nativeAdBinding.adHeadline.setText(nativeAd.getHeadline());
  if (nativeAd.getIcon() != null) {
      nativeAdBinding.adAppIcon.setImageDrawable(nativeAd.getIcon().getDrawable());
  }
  nativeAdBinding.adPrice.setText(nativeAd.getPrice());
  if (nativeAd.getStarRating() != null) {
      nativeAdBinding.adStars.setRating(nativeAd.getStarRating().floatValue());
  }
  nativeAdBinding.adStore.setText(nativeAd.getStore());

  // Hide views for assets that don't have data.
  nativeAdBinding.adAdvertiser.setVisibility(getAssetViewVisibility(nativeAd.getAdvertiser()));
  nativeAdBinding.adBody.setVisibility(getAssetViewVisibility(nativeAd.getBody()));
  nativeAdBinding.adCallToAction.setVisibility(getAssetViewVisibility(nativeAd.getCallToAction()));
  nativeAdBinding.adHeadline.setVisibility(getAssetViewVisibility(nativeAd.getHeadline()));
  nativeAdBinding.adAppIcon.setVisibility(getAssetViewVisibility(nativeAd.getIcon()));
  nativeAdBinding.adPrice.setVisibility(getAssetViewVisibility(nativeAd.getPrice()));
  nativeAdBinding.adStars.setVisibility(getAssetViewVisibility(nativeAd.getStarRating()));
  nativeAdBinding.adStore.setVisibility(getAssetViewVisibility(nativeAd.getStore()));

  // Inform GMA Next-Gen SDK that you have finished populating
  // the native ad views with this native ad.
  nativeAdView.registerNativeAd(nativeAd, nativeAdBinding.adMedia);
}

/**
* Determines the visibility of an asset view based on the presence of its asset.
*
* @param asset The native ad asset to check for nullability.
* @return {@link View#VISIBLE} if the asset is not null, {@link View#INVISIBLE} otherwise.
*/
private int getAssetViewVisibility(Object asset) {
    return (asset == null) ? View.INVISIBLE : View.VISIBLE;
}

Reklam Seçenekleri yer paylaşımı

SDK tarafından her reklam görünümüne bir Reklam Seçenekleri yer paylaşımı eklenir. Doğal reklam görünümünüzün tercih ettiğiniz köşesinde, otomatik olarak eklenen Reklam Seçenekleri logosu için boşluk bırakın. Ayrıca, Reklam Seçenekleri yer paylaşımının görülmesi önemli olduğundan arka plan renklerini ve resimlerini uygun şekilde seçin. Yer paylaşımının görünümü ve işlevi hakkında daha fazla bilgi için Doğal reklam alan açıklamaları başlıklı makaleyi inceleyin.

Reklam ilişkilendirmesi

Görünümün bir reklam olduğunu belirtmek için reklam ilişkilendirmesi göstermeniz gerekir. Politika yönergelerimizden daha fazla bilgi edinebilirsiniz.

Tıklamaları işleme

Doğal reklam görünümünün üzerindeki veya içindeki görünümlerde özel tıklama işleyiciler uygulamayın. Reklam görünümü öğelerinin tıklamaları, öğe görünümlerini doğru şekilde doldurup kaydettiğiniz sürece SDK tarafından işlenir.

Tıklamaları dinlemek için GMA Next-Gen SDK tıklama geri çağırma işlevini uygulayın:

Kotlin

private fun setEventCallback(nativeAd: NativeAd) {
  nativeAd.adEventCallback =
    object : NativeAdEventCallback {
      override fun onAdClicked() {
        Log.d(Constant.TAG, "Native ad recorded a click.")
      }
    }
}

Java

private void setEventCallback(NativeAd nativeAd) {
  nativeAd.setAdEventCallback(new NativeAdEventCallback() {
      @Override
      public void onAdClicked() {
        Log.d(Constant.TAG, "Native ad recorded a click.");
      }
  });
}

ImageScaleType

MediaView sınıfı, resimler gösterilirken ImageScaleType özelliğine sahiptir. Bir resmin MediaView içinde nasıl ölçeklendirileceğini değiştirmek istiyorsanız MediaView öğesinin setImageScaleType() yöntemini kullanarak ilgili ImageView.ScaleType değerini ayarlayın:

Kotlin

nativeAdViewBinding.mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP

Java

nativeAdViewBinding.mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);

MediaContent

MediaContent sınıfı, MediaView sınıfı kullanılarak görüntülenen doğal reklamın medya içeriğiyle ilgili verileri barındırır. MediaView mediaContent özelliği bir MediaContent örneğiyle ayarlandığında:

  • 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() adresini kontrol ederek öğrenebilirsiniz.

  • Reklamda video öğesi yoksa mainImage öğesi indirilir ve MediaView içine yerleştirilir.

Reklam öğesi özeti ekleme

Etkileşimli ve yapay zeka sohbet uygulamalarında GMA Next-Gen SDK, reklam öğesi için reklam öğesi özet öğesi (creativeSummary) sağlar. Reklamları, bir tanıtım mesajıyla uygulamanızın sohbet akışlarına entegre edebilirsiniz.

Metin görünümünü düzeninize ekleme

NativeAdView kapsayıcı düzeninizde reklam özeti öğesi için bir TextView ekleyin:

<TextView
    android:id="@+id/ad_creative_summary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="13sp" />

Görünümü doldurma ve kaydetme

TextView öğesini creativeSummary ile doldurun ve NativeAdView nesnenizdeki creativeSummaryView özelliğiyle kaydedin. Görünümü kaydetmek, reklam özeti öğesi için otomatik tıklama izlemeyi etkinleştirir.

Kotlin

private fun populateCreativeSummary(
  nativeAd: NativeAd,
  nativeAdBinding: NativeAdBinding,
  nativeAdView: NativeAdView,
) {
  val summary = nativeAd.creativeSummary
  if (summary == null) {
    nativeAdBinding.adCreativeSummary.visibility = View.GONE
    return
  }

  nativeAdBinding.adCreativeSummary.text = summary
  nativeAdBinding.adCreativeSummary.visibility = View.VISIBLE
  nativeAdView.creativeSummaryView = nativeAdBinding.adCreativeSummary
}

Java

private void populateCreativeSummary(
    NativeAd nativeAd, NativeAdBinding nativeAdBinding, NativeAdView nativeAdView) {
  String summary = nativeAd.getCreativeSummary();
  if (summary == null) {
    nativeAdBinding.adCreativeSummary.setVisibility(View.GONE);
    return;
  }

  nativeAdBinding.adCreativeSummary.setText(summary);
  nativeAdBinding.adCreativeSummary.setVisibility(View.VISIBLE);
  nativeAdView.setCreativeSummaryView(nativeAdBinding.adCreativeSummary);
}

Tıklama izleme ve değiştirilmiş metin

  • Doğrudan oluşturma: SDK tarafından sağlanan tam creativeSummary dizesini oluşturduğunuzda SDK tıklama işlemeyi etkinleştirmek için dizeyi NativeAdView kapsayıcısının içindeki creativeSummaryView mülküne kaydedin.
  • Değiştirilmiş girişler: Uygulamanız reklam öğesi özetini değiştiriyor, özetliyor veya özete özel sohbet metni ekliyorsa değiştirilen metni NativeAdView kapsayıcısının dışına yerleştirin.

Reklamı imha etme

Doğal reklam gösterdikten sonra reklamı imha edin. Aşağıdaki örnekte bir doğal reklam yok edilmektedir:

Kotlin

nativeAd.destroy()

Java

nativeAd.destroy();

Sonraki adımlar

Aşağıdaki konuları inceleyin:

Örnek

GMA Next-Gen SDK kullanımını gösteren örnek uygulamayı indirip çalıştırın.