Banner reklamlar

Banner reklamlar uygulama düzeninin bir kısmını kaplayan dikdörtgen reklamlardır. Sabit uyarlanabilir banner'lar, kullanıcılar uygulamayla etkileşimde bulunurken ekranın üst veya alt kısmına sabitlenmiş olarak ekranda kalan sabit en-boy oranlı reklamlardır.

Bu kılavuzda, sabit uyarlanabilir banner reklamın Android uygulamasına yüklenmesi ele alınmaktadır.

Ön koşullar

Her zaman test reklamlarıyla test yapın

Uygulamalarınızı oluşturup test ederken canlı ve üretim reklamları yerine test reklamlarını kullandığınızdan emin olun. Bu işlemi yapmazsanız hesabınız askıya alınabilir.

Test reklamlarını yüklemenin en kolay yolu, Android banner'ları için özel test reklam birimi kimliğimizi kullanmaktır:

ca-app-pub-3940256099942544/9214589741

Her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır ve kodlama, test etme ve hata ayıklama sırasında kendi uygulamalarınızda kullanabilirsiniz. Uygulamanızı yayınlamadan önce bu kimliği kendi reklam birimi kimliğinizle değiştirdiğinizden emin olun.

GMA Next-Gen SDK test reklamlarının işleyiş şekli hakkında daha fazla bilgi için Test reklamlarını etkinleştirme başlıklı makaleyi inceleyin.

AdView nesnesi oluşturma

Banner'ları görüntülemek için aşağıdakileri yapın:

Kotlin

  1. AdView nesnesi oluşturun.
  2. AdView nesnesini uygulamanızın düzenine ekleyin.

Aşağıdaki örnekte, AdView nesnesi oluşturulup bir uygulama düzenine ekleniyor:

private fun createAdView(adViewContainer: FrameLayout, activity: Activity) {
  val adView = AdView(activity)
  adViewContainer.addView(adView)
}

Java

  1. AdView nesnesi oluşturun.
  2. AdView nesnesini uygulamanızın düzenine ekleyin.

Aşağıdaki örnekte, AdView nesnesi oluşturulup bir uygulama düzenine ekleniyor:

private void createAdView(FrameLayout adViewContainer, Activity activity) {
  AdView adView = new AdView(activity);
  adViewContainer.addView(adView);
}

XML Düzeni

Düzen XML dosyanıza bir AdView öğesi ekleyin:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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">

  <com.google.android.libraries.ads.mobile.sdk.banner.AdView
      android:id="@+id/adView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Jetpack Compose

  1. Compose kullanıcı arayüzüne bir AndroidView öğesi ekleyin.
  2. Banner reklamı tutmak için bir mutableStateOf<BannerAd?> değişkeni tanımlayın:
// Initialize required variables.
val context = LocalContext.current
var bannerAdState by remember { mutableStateOf<BannerAd?>(null) }

// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  bannerAdState?.let { bannerAd ->
    Box(modifier = Modifier.fillMaxWidth()) {
      // Display the ad within an AndroidView.
      AndroidView(
        modifier = modifier.wrapContentSize(),
        factory = { bannerAd.getView(requireActivity()) },
      )
    }
  }
}

Reklam yükleme

Aşağıdaki örnekte, 360 genişliğinde sabit bir uyarlanabilir banner reklam bir AdView nesnesine yükleniyor:

Kotlin

private fun loadBannerAd(adView: AdView, activity: Activity) {
  // Get a BannerAdRequest for a 360 wide anchored adaptive banner ad.
  val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(activity, 360)
  val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()

  adView.loadAd(
    adRequest,
    object : AdLoadCallback<BannerAd> {
      override fun onAdLoaded(ad: BannerAd) {
        ad.adEventCallback =
          object : BannerAdEventCallback {
            override fun onAdImpression() {
              Log.d(TAG, "Banner ad recorded an impression.")
            }

            override fun onAdClicked() {
              Log.d(TAG, "Banner ad clicked.")
            }
          }
      }

      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.e(TAG, "Banner ad failed to load: $adError")
      }
    },
  )
}

Java

private void loadBannerAd(AdView adView, Activity activity) {
  // Get a BannerAdRequest for a 360 wide anchored adaptive banner ad.
  AdSize adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(activity, 360);
  BannerAdRequest adRequest = new BannerAdRequest.Builder(AD_UNIT_ID, adSize).build();

  adView.loadAd(
      adRequest,
      new AdLoadCallback<BannerAd>() {
        @Override
        public void onAdLoaded(@NonNull BannerAd bannerAd) {
          bannerAd.setAdEventCallback(
              new BannerAdEventCallback() {
                @Override
                public void onAdImpression() {
                  Log.d(TAG, "Banner ad recorded an impression.");
                }

                @Override
                public void onAdClicked() {
                  Log.d(TAG, "Banner ad clicked.");
                }
              });
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          Log.e(TAG, "Banner ad failed to load: " + adError);
        }
      });
}

Jetpack Compose

// Request an anchored adaptive banner with a width of 360.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(requireContext(), 360)

// Load the ad when the screen is active.
val coroutineScope = rememberCoroutineScope()
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(context) {
  bannerAdState?.destroy()
  if (!isPreviewMode) {
    coroutineScope.launch {
      when (val result = BannerAd.load(BannerAdRequest.Builder(AD_UNIT_ID, adSize).build())) {
        is AdLoadResult.Success -> {
          bannerAdState = result.ad
        }
        is AdLoadResult.Failure -> {
          showToast("Banner failed to load.")
          Log.w(Constant.TAG, "Banner ad failed to load: $result.error")
        }
      }
    }
  }
}

Reklamı yenileme

Reklam biriminizi yenilenecek şekilde yapılandırdıysanız reklam yüklenemediğinde başka bir reklam isteğinde bulunmanız gerekmez. GMA Next-Gen SDK, AdMob kullanıcı arayüzünde belirttiğiniz tüm yenileme hızlarına uyar. Yenilemeyi etkinleştirmediyseniz yeni bir istek gönderin. Yenileme hızı ayarlama gibi reklam birimi yenileme hakkında daha fazla bilgi için Banner reklamlarda otomatik yenileme özelliğini kullanma başlıklı makaleyi inceleyin.

Reklam kaynağını serbest bırakma

Banner reklamı kullanmayı bitirdiğinizde banner reklamın kaynaklarını serbest bırakabilirsiniz.

Reklamın kaynağını serbest bırakmak için reklamı görünüm hiyerarşisinden kaldırıp tüm referanslarını bırakırsınız:

Kotlin

// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
  parentView.removeView(adView)
}

// Destroy the banner ad resources.
adView?.destroy()

// Drop reference to the banner ad.
adView = null

Java

// Remove banner from view hierarchy.
if (adView.getParent() instanceof ViewGroup) {
  ((ViewGroup) adView.getParent()).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
// Drop reference to the banner ad.
adView = null;

Jetpack Compose


// Destroy the ad when the screen is disposed.
DisposableEffect(Unit) { onDispose { bannerAdState?.destroy() } }

Reklam etkinlikleri

Reklamın yaşam döngüsündeki bir dizi etkinliği (reklam gösterimi ve tıklama, reklamın açılması ve kapatılması dahil) dinleyebilirsiniz. Banner'ı göstermeden önce geri aramayı ayarlamanız önerilir.

Kotlin

BannerAd.load(
  BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.adEventCallback =
        object : BannerAdEventCallback {
          override fun onAdImpression() {
            // Banner ad recorded an impression.
          }

          override fun onAdClicked() {
            // Banner ad recorded a click.
          }

          override fun onAdShowedFullScreenContent() {
            // Banner ad showed.
          }

          override fun onAdDismissedFullScreenContent() {
            // Banner ad dismissed.
          }

          override fun onAdFailedToShowFullScreenContent(
            fullScreenContentError: FullScreenContentError
          ) {
            // Banner ad failed to show.
          }
        }
    }
    // ...
  }
)

Java

BannerAd.load(
    new BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        ad.setAdEventCallback(new BannerAdEventCallback() {
          @Override
          public void onAdImpression() {
            // Banner ad recorded an impression.
          }

          @Override
          public void onAdClicked() {
            // Banner ad recorded a click.
          }

          @Override
          public void onAdShowedFullScreenContent() {
            // Banner ad showed.
          }

          @Override
          public void onAdDismissedFullScreenContent() {
            // Banner ad dismissed.
          }

          @Override
          public void onAdFailedToShowFullScreenContent(
              @NonNull FullScreenContentError fullScreenContentError) {
            // Banner ad failed to show.
          }
        });

        // ...
      }
    });

Reklam yenileme geri araması

Banner reklamlar için otomatik yenileme özelliğini kullanıyorsanız BannerAdRefreshCallback, reklam yenileme etkinliklerini işler. Geri çağırmayı, reklam görünümünü görünüm hiyerarşinize eklemeden önce ayarladığınızdan emin olun. Reklam yenileme hakkında ayrıntılı bilgi için Reklam yenileme başlıklı makaleyi inceleyin.

Kotlin

BannerAd.load(
  BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.bannerAdRefreshCallback =
        object : BannerAdRefreshCallback {
          // Set the ad refresh callbacks.
          override fun onAdRefreshed() {
            // Called when the ad refreshes.
          }

          override fun onAdFailedToRefresh(loadAdError: LoadAdError) {
            // Called when the ad fails to refresh.
          }
        }

      // ...
    }
  }
)

Java

BannerAd.load(
    new BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        ad.setBannerAdRefreshCallback(
            // Set the ad refresh callbacks.
            new BannerAdRefreshCallback() {
              @Override
              public void onAdRefreshed() {
                // Called when the ad refreshes.
              }

              @Override
              public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
                // Called when the ad fails to refresh.
              }
            });
        // ...
      }
    });

Video reklamlar için donanım hızlandırma

Video reklamların banner reklam görünümlerinizde başarıyla gösterilmesi için donanım hızlandırma etkinleştirilmelidir.

Donanım hızlandırma varsayılan olarak etkindir ancak bazı uygulamalar bu özelliği devre dışı bırakabilir. Bu durum uygulamanız için geçerliyse reklam kullanan Activity sınıfları için donanım hızlandırmayı etkinleştirmenizi öneririz.

Donanım hızlandırmayı etkinleştirme

Uygulamanız, donanım hızlandırma özelliği genel olarak etkinleştirildiğinde düzgün çalışmıyorsa bu özelliği tek tek etkinlikler için de kontrol edebilirsiniz. Donanım hızlandırmayı etkinleştirmek veya devre dışı bırakmak için AndroidManifest.xml içindeki <application> ve <activity> öğeleri için android:hardwareAccelerated özelliğini kullanabilirsiniz. Aşağıdaki örnek, uygulamanın tamamında donanım hızlandırmayı etkinleştirir ancak bir etkinlikte devre dışı bırakır:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

Donanım hızlandırmayı kontrol etme seçenekleri hakkında daha fazla bilgi için Donanım hızlandırma kılavuzuna bakın. Etkinlik devre dışı bırakılırsa donanım hızlandırma için tek tek reklam görüntülemelerinin etkinleştirilemeyeceğini, bu nedenle etkinliğin kendisinde donanım hızlandırmanın etkinleştirilmesi gerektiğini unutmayın.

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