Bu kılavuzda, Android uygulamasına sabit uyarlanabilir banner reklam yükleme işlemi ele alınmaktadır.
Ön koşullar
- Başlangıç kılavuzunu tamamlayın.
Her zaman test reklamlarıyla test edin
Uygulamalarınızı oluşturup test ederken canlı üretim reklamları yerine test reklamları 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:
/21775744923/example/adaptive-banner
Her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır. 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.
Google Mobile Ads SDK'sının test reklamlarının işleyiş şekli hakkında daha fazla bilgi için Test reklamları etkinleştirme başlıklı makaleyi inceleyin.
Reklam görüntülemesini tanımlama
XML Düzeni
Yerleştirilmiş uyarlanabilir banner reklamınızın kapsayıcısı olarak kullanılacak bir görünümü sayfa düzeni XML dosyanıza ekleyin:
<!-- Ad view container that fills the width of the screen and adjusts its
height to the content of the ad. -->
<FrameLayout
android:id="@+id/ad_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true" />
Jetpack Compose
İlk adım olarak JetpackComposeDemo/compose-util modülünü ekleyin. Bu modülde,
AdView
nesnesini ve öğelerini oluşturmaya yönelik yardımcılar yer alır.İkinci adımda,
compose-util
modülünü kullanarak birBannerAd
sınıfı oluşturun:
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Reklam yükleme
- Reklam birimi kimliği ve sabitlenmiş uyarlanabilir reklam boyutu içeren bir
BannerAdRequest
nesnesi oluşturun. BannerAd.load()
numaralı telefonu arayın.BannerAd.getView()
öğesini görünüm hiyerarşisine ekleyin.
Kotlin
import com.google.android.libraries.ads.mobile.sdk.banner.AdSize
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdEventCallback
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRefreshCallback
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError
class MainActivity : Activity() {
private var bannerAd: BannerAd? = null
private lateinit var binding: ActivityMainBinding
private lateinit var adSize: AdSize
private lateinit var bannerViewContainer: FrameLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 320 is a placeholder value. Replace 320 with your banner container width.
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320)
// Give the banner container a placeholder height to avoid a sudden layout
// shifts when the ad loads.
bannerViewContainer = binding.bannerViewContainer
val bannerLayoutParams = bannerViewContainer.layoutParams
bannerLayoutParams.height = adSize.getHeightInPixels(requireContext())
bannerViewContainer.layoutParams = bannerLayoutParams
// Step 1 - Create a BannerAdRequest object with ad unit ID and size.
val adRequest = BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build()
// Step 2 - Load the ad.
BannerAd.load(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
// Assign the loaded ad to the BannerAd object.
bannerAd = ad
// Step 3 - Call BannerAd.getView() to get the View and add it
// to view hierarchy on the UI thread.
activity?.runOnUiThread {
binding.bannerViewContainer.addView(ad.getView(requireActivity()))
}
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
bannerAd = null
}
},
)
}
}
Java
import com.google.android.libraries.ads.mobile.sdk.banner.AdSize;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdEventCallback;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRefreshCallback;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest;
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback;
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;
public class MainActivity extends AppCompatActivity {
private BannerAd bannerAd;
private ActivityMainBinding binding;
private AdSize adSize;
private FrameLayout bannerViewContainer;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
// 320 is a placeholder value. Replace 320 with your banner container width.
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320);
// Give the banner container a placeholder height to avoid a sudden layout
// shifts when the ad loads.
bannerViewContainer = binding.bannerViewContainer;
LayoutParams bannerLayoutParams = bannerViewContainer.getLayoutParams();
bannerLayoutParams.height = adSize.getHeightInPixels(this);
bannerViewContainer.setLayoutParams(bannerLayoutParams);
// Step 1 - Create a BannerAdRequest object with ad unit ID and size.
BannerAdRequest adRequest = new BannerAdRequest.Builder("/21775744923/example/adaptive-banner",
adSize).build();
// Step 2 - Load the ad.
BannerAd.load(
adRequest,
new AdLoadCallback<BannerAd>() {
@Override
public void onAdLoaded(@NonNull BannerAd ad) {
// Assign the loaded ad to the BannerAd object.
bannerAd = ad;
// Step 3 - Call BannerAd.getView() to get the View and add it
// to view hierarchy on the UI thread.
runOnUiThread(
() -> binding.bannerViewContainer.addView(ad.getView(MainActivity.this)));
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
bannerAd = null;
}
});
}
}
Jetpack Compose
private suspend fun loadAdaptiveBannerAd(isPreviewMode: Boolean): BannerAd? =
suspendCoroutine { continuation ->
// Prevent loading the AdView if the app is in preview mode.
if (isPreviewMode) {
continuation.resume(null)
return@suspendCoroutine
}
// Request an anchored adaptive banner with a width of 360.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(requireContext(), 360)
BannerAd.load(
BannerAdRequest.Builder(AD_UNIT_ID, adSize).build(),
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
// Set an AdListener to receive callbacks for various ad events.
ad.adEventCallback =
object : BannerAdEventCallback {
override fun onAdImpression() {
Log.d(Constant.TAG, "Banner ad recorded an impression.")
}
override fun onAdClicked() {
Log.d(Constant.TAG, "Banner ad recorded a click.")
}
}
ad.bannerAdRefreshCallback =
object : BannerAdRefreshCallback {
override fun onAdRefreshed() {
showToast("Banner ad refreshed.")
Log.d(Constant.TAG, "Banner ad refreshed.")
}
override fun onAdFailedToRefresh(adError: LoadAdError) {
showToast("Banner ad failed to refresh.")
Log.w(Constant.TAG, "Banner ad failed to refresh: $adError")
}
}
showToast("Banner ad loaded.")
Log.d(Constant.TAG, "Banner ad loaded.")
continuation.resume(ad)
}
override fun onAdFailedToLoad(adError: LoadAdError) {
showToast("Banner failed to load.")
Log.w(Constant.TAG, "Banner ad failed to load: $adError")
continuation.resume(null)
}
},
)
}
Reklamı yenileme
Reklam biriminizi yenilenecek şekilde yapılandırdıysanız reklam yüklenemezse başka bir reklam istemeniz gerekmez. Google Mobile Ads SDK'sı, Ad Manager kullanıcı arayüzünde belirttiğiniz tüm yenileme hızlarına uyar. Yenilemeyi etkinleştirmediyseniz yeni bir istek gönderin. Reklam birimi yenileme hakkında daha fazla bilgi (ör. yenileme hızı ayarlama) için Mobil uygulamalarda reklamların yenileme hızı başlıklı makaleyi inceleyin.
Reklam kaynağını serbest bırakma
Bir banner reklamı kullanmayı bıraktığınızda banner reklamın kaynaklarını serbest bırakabilirsiniz.
Reklamın kaynağını yayınlamak için reklamı görünüm hiyerarşisindeki yerinden kaldırır ve 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 gösterimi ve tıklamanın yanı sıra reklamın açılması ve kapanması da dahil olmak üzere reklamın yaşam döngüsünde çeşitli etkinlikleri dinleyebilirsiniz. Geri aramayı banner'ı göstermeden önce ayarlamanız önerilir.Kotlin
BannerAd.load(
BannerAdRequest.Builder("/21775744923/example/adaptive-banner", 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("/21775744923/example/adaptive-banner", 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 çağırma işlevi
Banner reklamlar için otomatik yenileme özelliğini kullanıyorsanız BannerAdRefreshCallback
, reklam yenileme etkinliklerini yönetir. Reklam görünümünü görünüm hiyerarşinize eklemeden önce geri çağırma işlevini 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("/21775744923/example/adaptive-banner", 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("/21775744923/example/adaptive-banner", 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üntülemelerinizde başarılı bir şekilde gösterilebilmesi için donanım hızlandırması etkinleştirilmiş olmalıdır.
Donanım hızlandırması varsayılan olarak etkindir ancak bazı uygulamalar bunu 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ırması genel olarak etkinken düzgün çalışmıyorsa bu ayarı ayrı etkinlikler için de kontrol edebilirsiniz. Donanım hızlandırmayı etkinleştirmek veya devre dışı bırakmak için AndroidManifest.xml
'inizdeki <application>
ve <activity>
öğeleri için android:hardwareAccelerated
özelliğini kullanabilirsiniz. Aşağıdaki örnekte, uygulamanın tamamı için donanım hızlandırması etkinleştirilir ancak bir etkinlik için devre dışı bırakılı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ışıysa ayrı reklam görüntülemelerinin donanım hızlandırma için etkinleştirilemeyeceğini unutmayın. Bu nedenle, etkinliğin kendisinde donanım hızlandırmanın etkinleştirilmesi gerekir.
Yeni nesil Google Mobile Ads SDK'sının kullanımını gösteren örnek uygulamayı indirip çalıştırın.