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
- JetpackCompose Utilities klasörünü ekleyin. Bu klasörde,
NativeAdViewnesnesini 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
MediaViewiç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 veMediaViewiç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
Java
Tıklama izleme ve değiştirilmiş metin
- Doğrudan oluşturma: SDK tarafından sağlanan tam
creativeSummarydizesini oluşturduğunuzda SDK tıklama işlemeyi etkinleştirmek için dizeyiNativeAdViewkapsayıcısının içindekicreativeSummaryViewmü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
NativeAdViewkapsayı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.