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 hiển thị trên màn hình trong khi người dùng tương tác với ứng dụng. Loại quảng cáo này 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 ứ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 sản phẩm. Chúng tôi có thể tạm ngưng tài khoản của bạn nếu bạn không làm như vậy.

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ữ Android:

/21775744923/example/adaptive-banner

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 Google Mobile Ads SDK (Legacy), hãy xem Bật quảng cáo thử nghiệm.

Xác định khung hiển thị quảng cáo

Bố cục XML

Thêm khung hiển thị vào tệp XML bố cục để làm vùng chứa cho quảng cáo biểu ngữ thích ứng cố định:

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

  1. Thêm thư mục Tiện ích JetpackCompose. Thư mục này bao gồm các trình trợ giúp để tạo đối tượng AdView và thành phần.

  2. Tạo AdView:


// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}

Đặt kích thước quảng cáo

Biểu ngữ thích ứng cỡ lớn cung cấp định dạng lớn hơn được thiết kế cho các bố cục không cuộn. So với biểu ngữ neo thích ứng tiêu chuẩn, các biểu ngữ này cho phép chiều cao tối đa lớn hơn, lên đến 20% chiều cao màn hình và từ 50 đến 150 dp. Không gian tăng lên này được tối ưu hoá cho nội dung video.

Đặt AdSize thành loại biểu ngữ neo thích ứng có chiều rộng đã chỉ định:

Java


// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));

Kotlin


// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))

Jetpack Compose


// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)

Đặt kích thước quảng cáo nhỏ hơn hoặc bằng kích thước màn hình thiết bị. Để xác định kích thước màn hình tối đa, hãy sử dụng Resources.getDisplayMetrics phương thức. Kích thước đối tượng AdSize sử dụng pixel không phụ thuộc vào mật độ (dp). Khi so sánh, hãy chuyển đổi kích thước màn hình từ pixel sang dp. Để biết thông tin chi tiết về các hạn chế về kích thước, hãy xem bài viết Khắc phục sự cố về lượt hiển thị không được đáp ứng trong Ad Manager.

Thêm AdManagerAdView vào bố cục

Tạo AdManagerAdView bằng kích thước quảng cáo để thêm vào bố cục của ứng dụng:

Java


// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));

// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);

Kotlin


// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView

// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)

Jetpack Compose


val adView = remember { AdManagerAdView(context) }

// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANAGER_ADAPTIVE_BANNER_AD_UNIT_ID

// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)

// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}

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

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

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);

Kotlin

val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)

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

Nếu bạn đã định cấu hình đơn vị quảng cáo để làm mới, thì bạn không cần yêu cầu một quảng cáo khác khi quảng cáo không tải được. Google Mobile Ads SDK (Legacy) sẽ áp dụng tốc độ làm mới mà bạn chỉ định trong giao diện người dùng Ad Manager. Nếu bạn chưa bật tính năng làm mới, hãy đưa ra yêu cầu mới. Để biết thêm thông tin chi tiết 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 Tốc độ làm mới của quảng cáo trong ứng dụng dành cho thiết bị di động.

Phát hành tài nguyên quảng cáo

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

Để phát hành 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à loại bỏ tất cả các tham chiếu của quảng cáo đó:

Java

public void destroyBanner() {
  // Remove banner from view hierarchy.
  if (adView != null) {
    View parentView = (View) adView.getParent();
    if (parentView instanceof ViewGroup) {
      ((ViewGroup) parentView).removeView(adView);
    }

    // Destroy the banner ad resources.
    adView.destroy();
  }

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

Kotlin

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
}

Jetpack Compose

DisposableEffect(Unit) {
  // Destroy the AdView to prevent memory leaks when the screen is disposed.
  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 sự kiện tải, lượt hiển thị quảng cáo và lượt nhấp vào quảng cáo, cũng như sự kiện mở và đóng quảng cáo. Bạn nên đặt lệnh gọi lại trước khi tải biểu ngữ.

Java

if (adView != null) {
  adView.setAdListener(
      new AdListener() {
        @Override
        public void onAdClicked() {
          // Code to be executed when the user clicks on an ad.
        }

        @Override
        public void onAdClosed() {
          // Code to be executed when the user is about to return
          // to the app after tapping on an ad.
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          // Code to be executed when an ad request fails.
        }

        @Override
        public void onAdImpression() {
          // Code to be executed when an impression is recorded
          // for an ad.
        }

        @Override
        public void onAdLoaded() {
          // Code to be executed when an ad finishes loading.
        }

        @Override
        public void onAdOpened() {
          // Code to be executed when an ad opens an overlay that
          // covers the screen.
        }
      });
}

Kotlin

adView?.adListener =
  object : AdListener() {
    override fun onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    override fun onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      // Code to be executed when an ad request fails.
    }

    override fun onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    override fun onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    override fun onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
  }

Mỗi phương thức có thể ghi đè trong AdListener tương ứng với một sự kiện trong vòng đời của quảng cáo.

Các phương thức có thể ghi đè
onAdClicked() Phương thức onAdClicked() sẽ được gọi khi hệ thống ghi lại một lượt nhấp vào quảng cáo.
onAdClosed() Phương thức onAdClosed() sẽ được gọi khi người dùng truy cập vào URL đích của một quảng cáo , sau đó quay trở lại ứng dụng. Ứng dụng của bạn có thể sử dụng phương thức này để tiếp tục các hoạt động bị tạm ngưng hoặc thực hiện mọi hoạt động cần thiết khác để giúp ứng dụng sẵn sàng tương tác.
onAdFailedToLoad() Phương thức onAdFailedToLoad() là phương thức duy nhất có chứa thông số. Thông số lỗi thuộc loại LoadAdError mô tả lỗi đã xảy ra. Để biết thêm thông tin, tham khảo tài liệu về Cách gỡ lỗi tải quảng cáo.
onAdImpression() Phương thức onAdImpression() sẽ được gọi khi hệ thống ghi lại một lượt hiển thị quảng cáo.
onAdLoaded() Phương thức onAdLoaded() sẽ được thực thi sau khi quảng cáo đã tải xong. Ví dụ: nếu bạn muốn trì hoãn việc thêm AdManagerAdView vào hoạt động hoặc phân đoạn của mình cho đến khi chắc chắn rằng quảng cáo sẽ được tải, thì bạn có thể làm việc này tại đây.
onAdOpened() Phương thức onAdOpened() sẽ được gọi khi một quảng cáo mở lớp phủ trên màn hình.

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

Để quảng cáo dạng video hiển thị thành công trong khung hiển thị 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 tính năng 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ínhandroid: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>

Hãy xem hướng dẫn về 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 khung hiển thị 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.

Phương pháp tính số lần hiển thị theo cách thủ công

Phương pháp tính số lần hiển thị theo cách thủ công chỉ tương thích với chiến dịch bán trực tiếp và chiến dịch tự quảng bá có mẫu quảng cáo được thiết lập và chạy quảng cáo trực tiếp trong Ad Manager. Bạn không nên sử dụng phương pháp này cho quảng cáo thay thế hoặc quảng cáo của mạng bên thứ ba. Để biết thêm thông tin chi tiết, hãy xem bài viết Tính số lượt hiển thị và lượt nhấp.

Bạn có thể tự gửi các ping lượt hiển thị đến Ad Manager nếu đáp ứng các điều kiện đặc biệt về thời điểm ghi lại một lượt hiển thị:

Java

if (adManagerAdView != null) {
  adManagerAdView.setManualImpressionsEnabled(true);
}

Kotlin

adManagerAdView?.setManualImpressionsEnabled(true)

Khi xác định rằng một quảng cáo đã được trả về thành công và đang hiển thị trên màn hình, bạn có thể tự ghi lại một lượt hiển thị:

Java

if (adManagerAdView != null) {
  adManagerAdView.recordManualImpression();
}

Kotlin

adManagerAdView?.recordManualImpression()

Sự kiện trong ứng dụng

Sự kiện trong ứng dụng cho phép bạn tạo những quảng cáo có thể gửi thông báo đến mã ứng dụng của sự kiện đó. Sau đó, ứng dụng có thể thực hiện các hành động dựa trên những thông báo này.

Bạn có thể theo dõi các sự kiện trong ứng dụng cụ thể của Ad Manager bằng cách sử dụng AppEventListener. Các sự kiện này có thể xảy ra bất cứ lúc nào trong vòng đời của quảng cáo, ngay cả trước khi onAdLoaded() được gọi.

Đặt AppEventListener trên AdManagerAdView:

Java

if (adManagerAdView != null) {
  adManagerAdView.setAppEventListener(this);
}

Kotlin

adManagerAdView?.appEventListener = this

Dưới đây là ví dụ cho thấy cách thay đổi màu nền của ứng dụng, tuỳ thuộc vào sự kiện ứng dụng đi kèm tên màu:

Java

@Override
public void onAppEvent(@NonNull String name, @NonNull String info) {
  if (name.equals("color")) {
    switch (info) {
      case "green":
        // Set background color to green.
        break;
      case "blue":
        // Set background color to blue.
        break;
      default:
        // Set background color to black.
        break;
    }
  }
}

Kotlin

override fun onAppEvent(name: String, info: String) {
  if (name == "color") {
    when (info) {
      "green" -> {
        // Set background color to green.
      }
      "blue" -> {
        // Set background color to blue.
      }
      else -> {
        // Set background color to black.
      }
    }
  }
}

Đây là mẫu quảng cáo tương ứng, gửi thông báo sự kiện ứng dụng kèm màu cho Trình xử lý:

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

Xem ví dụ về Sự kiện ứng dụng của Ad Manager để biết cách triển khai các sự kiện ứng dụng trong ứng dụng API Demo.

Java Kotlin JetpackCompose

Các bước tiếp theo

Biểu ngữ có thể thu gọn

Quảng cáo biểu ngữ có thể thu gọn là quảng cáo biểu ngữ ban đầu xuất hiện dưới dạng lớp phủ lớn hơn, có nút để thu gọn quảng cáo về kích thước nhỏ hơn. Hãy cân nhắc sử dụng loại quảng cáo này để tối ưu hoá thêm hiệu suất của bạn. Xem quảng cáo biểu ngữ có thể thu gọn để biết thêm thông tin chi tiết.

Biểu ngữ cùng dòng thích ứng

Biểu ngữ cùng dòng thích ứng là biểu ngữ lớn hơn, cao hơn so với biểu ngữ thích ứng cố định. Biểu ngữ này có chiều cao thay đổi và có thể cao bằng màn hình thiết bị. Bạn nên sử dụng quảng cáo biểu ngữ thích ứng cùng dòng thay vì quảng cáo biểu ngữ neo thích ứng cho các ứng dụng đặt quảng cáo biểu ngữ trong nội dung có thể cuộn. Xem biểu ngữ thích ứng cùng dòng để biết thêm thông tin chi tiết.

Khám phá các chủ đề khác