Thiết lập quảng cáo biểu ngữ

Quảng cáo biểu ngữ là quảng cáo hình chữ nhật chiếm một phần bố cục của ứng dụng. Biểu ngữ thích ứng cố định là quảng cáo có tỷ lệ khung hình cố định, luôn xuất hiện trên màn hình trong khi người dùng tương tác với ứng dụng, nằm cố định ở đầu hoặc cuối màn hình.

Hướng dẫn này trình bày cách tải quảng cáo biểu ngữ neo thích ứng vào một ứng dụng Android.

Điều kiện tiên quyết

Luôn thử nghiệm bằng quảng cáo thử nghiệm

Khi bạn tạo và thử nghiệm ứng dụng, hãy nhớ sử dụng quảng cáo thử nghiệm thay vì quảng cáo đang chạy trong thực tế. Nếu bạn không làm như vậy, tài khoản của bạn có thể bị tạm ngưng.

Cách đơn giản nhất để tải quảng cáo thử nghiệm là sử dụng mã đơn vị quảng cáo thử nghiệm dành riêng cho quảng cáo biểu ngữ trên Android:

ca-app-pub-3940256099942544/9214589741

Mã này được định cấu hình đặc biệt để trả về quảng cáo thử nghiệm cho mọi yêu cầu và bạn có thể sử dụng mã này trong ứng dụng của mình khi lập trình, chạy thử nghiệm và gỡ lỗi. Bạn chỉ cần nhớ thay thế mã này bằng mã đơn vị quảng cáo của mình trước khi xuất bản ứng dụng.

Để biết thêm thông tin về cách hoạt động của quảng cáo thử nghiệm GMA Next-Gen SDK, hãy xem bài viết Bật quảng cáo thử nghiệm.

Tạo một đối tượng AdView

Để hiển thị biểu ngữ, hãy làm như sau:

Kotlin

  1. Tạo một đối tượng AdView.
  2. Thêm đối tượng AdView vào bố cục của ứng dụng.

Ví dụ sau đây sẽ tạo và thêm đối tượng AdView vào bố cục ứng dụng:

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

Java

  1. Tạo một đối tượng AdView.
  2. Thêm đối tượng AdView vào bố cục của ứng dụng.

Ví dụ sau đây sẽ tạo và thêm đối tượng AdView vào bố cục ứng dụng:

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

Bố cục XML

Thêm phần tử AdView vào tệp XML bố cục:

<?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. Tạo một đối tượng AdView bên trong một khối remember.
  2. Đưa phần tử AndroidView vào giao diện người dùng Compose để hiển thị đối tượng AdView:
val context = LocalContext.current
val adView = remember { AdView(context) }

// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) {
    // Display the ad within an AndroidView.
    AndroidView(modifier = modifier.wrapContentSize(), factory = { adView })
  }
}

Tải một quảng cáo

Ví dụ sau đây tải một quảng cáo biểu ngữ neo thích ứng có chiều rộng 360 vào một đối tượng AdView:

Kotlin

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

  adView.loadAd(
    adRequest,
    object : AdLoadCallback<BannerAd> {
      override fun onAdLoaded(ad: BannerAd) {
        Log.d(TAG, "Banner ad loaded.")
      }

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

Java

private void loadBannerAd(AdView adView, Activity activity) {
  // Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
  AdSize adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(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) {
          Log.d(TAG, "Banner ad loaded.");
        }

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

Jetpack Compose

// Request a large anchored adaptive banner with a width of 360.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, 360)

// Load the ad when the screen is active.
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(adSize) {
  if (!isPreviewMode) {
    val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()
    adView.loadAd(
      adRequest,
      object : AdLoadCallback<BannerAd> {
        override fun onAdLoaded(ad: BannerAd) {
          Log.d(Constant.TAG, "Banner ad loaded.")
        }

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

Làm mới quảng cáo

Nếu đã định cấu hình đơn vị quảng cáo để làm mới, thì bạn không cần phải yêu cầu một quảng cáo khác khi quảng cáo không tải được. GMA Next-Gen SDK tuân thủ mọi tốc độ làm mới mà bạn đã chỉ định trong giao diện người dùng AdMob. Nếu bạn chưa bật tính năng làm mới, hãy đưa ra một yêu cầu mới. Để biết thêm thông tin về tính năng làm mới đơn vị quảng cáo, chẳng hạn như cách đặt tốc độ làm mới, hãy xem bài viết Sử dụng tính năng tự động làm mới cho quảng cáo biểu ngữ.

Giải phóng tài nguyên quảng cáo

Khi sử dụng xong quảng cáo biểu ngữ, bạn có thể giải phóng tài nguyên của quảng cáo biểu ngữ.

Để giải phóng tài nguyên của quảng cáo, bạn hãy xoá quảng cáo đó khỏi hệ phân cấp view và xoá tất cả các tham chiếu của quảng cáo:

Kotlin

private fun destroyBanner() {
  // 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

private void destroyBanner() {
  // Remove banner from view hierarchy.
  if (adView != null) {
    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 { adView.destroy() } }

Sự kiện quảng cáo

Bạn có thể theo dõi một số sự kiện trong vòng đời của quảng cáo, bao gồm cả lượt hiển thị và lượt nhấp vào quảng cáo, cũng như lượt mở và đóng quảng cáo. Bạn nên đặt lệnh gọi lại trước khi hiển thị biểu ngữ.

Kotlin

override fun onAdLoaded(ad: BannerAd) {
  ad.adEventCallback =
    object : BannerAdEventCallback {
      override fun onAdImpression() {
        // Banner ad recorded an impression.
        Log.d(TAG, "Banner ad recorded an impression.")
      }

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

      override fun onAdShowedFullScreenContent() {
        // Banner ad showed.
        Log.d(TAG, "Banner ad showed full screen content.")
      }

      override fun onAdDismissedFullScreenContent() {
        // Banner ad dismissed.
        Log.d(TAG, "Banner ad dismissed full screen content.")
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // Banner ad failed to show.
        Log.w(TAG, "Banner ad failed to show full screen content: $fullScreenContentError")
      }
    }
}

Java

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

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

        @Override
        public void onAdShowedFullScreenContent() {
          // Banner ad showed.
          Log.d(TAG, "Banner ad showed full screen content.");
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // Banner ad dismissed.
          Log.d(TAG, "Banner ad dismissed full screen content.");
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          // Banner ad failed to show.
          Log.w(
              TAG,
              "Banner ad failed to show full screen content: " + fullScreenContentError);
        }
      });
}

Lệnh gọi lại làm mới quảng cáo

BannerAdRefreshCallback xử lý các sự kiện làm mới quảng cáo nếu bạn sử dụng tính năng tự động làm mới cho quảng cáo biểu ngữ. Hãy nhớ đặt lệnh gọi lại trước khi bạn thêm chế độ xem quảng cáo vào hệ phân cấp view. Để biết thông tin chi tiết về cách làm mới quảng cáo, hãy xem bài viết Làm mới quảng cáo.

Kotlin

adView.loadAd(
  adRequest,
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.bannerAdRefreshCallback =
        object : BannerAdRefreshCallback {
          override fun onAdRefreshed() {
            // Banner ad refreshed.
            Log.d(TAG, "Banner ad refreshed.")
          }

          override fun onAdFailedToRefresh(adError: LoadAdError) {
            // Banner ad failed to refresh.
            Log.w(TAG, "Banner ad failed to refresh: $adError")
          }
        }
    }

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

Java

adView.loadAd(
    adRequest,
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd bannerAd) {
        bannerAd.setBannerAdRefreshCallback(
            new BannerAdRefreshCallback() {
              @Override
              public void onAdRefreshed() {
                // Banner ad refreshed.
                Log.d(TAG, "Banner ad refreshed.");
              }

              @Override
              public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
                // Banner ad failed to refresh.
                Log.w(TAG, "Banner ad failed to refresh: " + adError);
              }
            });
      }

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

Tăng tốc phần cứng cho quảng cáo dạng video

Để quảng cáo dạng video xuất hiện thành công trong chế độ xem quảng cáo biểu ngữ, bạn phải bật tính năng tăng tốc phần cứng.

Tính năng tăng tốc phần cứng được bật theo mặc định, nhưng một số ứng dụng có thể chọn tắt tính năng này. Nếu sử dụng tính năng tăng tốc phần cứng cho ứng dụng của mình, bạn nên bật tính năng này cho các lớp Activity có sử dụng quảng cáo.

Bật chế độ tăng tốc phần cứng

Nếu ứng dụng của bạn hoạt động không đúng cách trên toàn cầu khi tính năng tăng tốc phần cứng đang bật, thì bạn vẫn có thể kiểm soát tính năng này cho các hoạt động riêng lẻ. Để bật hoặc tắt tính năng tăng tốc phần cứng, bạn có thể sử dụng thuộc tính android:hardwareAccelerated cho các phần tử <application> và <activity> trong AndroidManifest.xml. Ví dụ sau đây bật tính năng tăng tốc phần cứng cho toàn bộ ứng dụng nhưng tắt tính năng này đối với một hoạt động:

<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>

Xem hướng dẫn tăng tốc phần cứng để biết thêm thông tin về các cách kiểm soát tính năng tăng tốc phần cứng. Xin lưu ý rằng hệ thống không thể bật chế độ xem quảng cáo riêng lẻ để tăng tốc phần cứng nếu hoạt động đang tắt, do đó, hoạt động phải tự bật tính năng tăng tốc phần cứng.

Tải xuống và chạy ứng dụng mẫu minh hoạ cách sử dụng GMA Next-Gen SDK.