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
- Thiết lập Google Mobile Ads SDK (Legacy).
- Không bắt buộc: Để xem ví dụ về cách triển khai quảng cáo biểu ngữ, hãy chọn một trong các ứng dụng mẫu sau:
- Ví dụ về quảng cáo biểu ngữ neo thích ứng bằng Java, Kotlin, hoặc Jetpack Compose.
- Bản minh hoạ các tính năng nâng cao bằng Java hoặc Kotlin.
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
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
AdViewvà thành phần.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.
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.