Ngoài các định dạng gốc do hệ thống xác định, nhà xuất bản Ad Manager có thể tạo định dạng quảng cáo gốc riêng bằng cách xác định danh sách tuỳ chỉnh chứa các thành phần. Những định dạng này được gọi là định dạng quảng cáo gốc tuỳ chỉnh và có thể dùng với quảng cáo đặt trước. Điều này cho phép nhà xuất bản chuyển dữ liệu có cấu trúc tuỳ ý đến các ứng dụng của họ. Những quảng cáo này được biểu thị bằng đối tượng NativeCustomFormatAd.
Tải định dạng quảng cáo gốc tuỳ chỉnh
Hướng dẫn này giải thích cách tải và hiển thị định dạng quảng cáo gốc tuỳ chỉnh.
Tải quảng cáo gốc tuỳ chỉnh
Để tải một quảng cáo gốc tuỳ chỉnh, hãy làm như sau:
Thêm loại
NativeAdType.CUSTOM_NATIVElàm loại quảng cáo trongNativeAdRequest.Đặt mã định dạng của quảng cáo gốc tuỳ chỉnh.
Kotlin
Java
Mã định dạng quảng cáo gốc tuỳ chỉnh
Bạn có thể tìm thấy mã định dạng dùng để xác định một định dạng quảng cáo gốc tuỳ chỉnh trong giao diện người dùng Ad Manager trong mục Gốc bên trong trình đơn thả xuống Phân phối:

Mỗi mã định dạng quảng cáo gốc tuỳ chỉnh đều xuất hiện bên cạnh tên của định dạng đó. Khi nhấp vào một trong các tên, bạn sẽ được chuyển đến màn hình chi tiết cho thấy thông tin về các trường của định dạng:

Tại đây, bạn có thể thêm, chỉnh sửa và xoá từng trường. Ghi lại Tên của từng thành phần. Tên là khoá dùng để lấy dữ liệu cho từng thành phần khi hiển thị định dạng quảng cáo gốc tuỳ chỉnh.
Hiển thị định dạng quảng cáo gốc tuỳ chỉnh
Định dạng quảng cáo gốc tuỳ chỉnh khác với định dạng do hệ thống xác định ở chỗ nhà xuất bản có quyền xác định danh sách thành phần của riêng mình để tạo nên một quảng cáo. Do đó, quy trình hiển thị một định dạng quảng cáo gốc tuỳ chỉnh sẽ khác với quy trình hiển thị định dạng quảng cáo do hệ thống xác định ở một số điểm sau:
- Thành phần văn bản và hình ảnh có sẵn thông qua các phương thức truy xuất
getText()vàgetImage()lấy tên trường làm tham số. - Vì không có lớp
ViewGroupchuyên biệt để đăng ký với Google, nên bạn cần ghi lại lượt hiển thị và lượt nhấp theo cách thủ công. - Quảng cáo gốc tuỳ chỉnh có nội dung nghe nhìn
nullnếu quảng cáo không chứa thành phần video.
Ví dụ này cho thấy cách hiển thị một CustomNativeAd:
Kotlin
private fun displayCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
// Render the text elements.
// The `customNativeAdBinding` is the layout binding for the ad container that
// contains all `CustomNativeAd` assets.
customNativeAdBinding.headline.text = customNativeAd.getText("Headline")
customNativeAdBinding.caption.text = customNativeAd.getText("Caption")
// If the main asset is an image, render it with an ImageView.
val imageView = ImageView(context)
imageView.adjustViewBounds = true
imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
customNativeAdBinding.mediaPlaceholder.addView(imageView)
// Render the ad choices icon.
renderAdChoices(customNativeAd)
// Record an impression.
customNativeAd.recordImpression()
}
Java
private void displayCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
// Render the text elements.
// The `customNativeAdBinding` is the layout binding for the ad container that
// contains all `CustomNativeAd` assets.
if (customNativeAdBinding != null) {
customNativeAdBinding.headline.setText(customNativeAd.getText("Headline"));
customNativeAdBinding.caption.setText(customNativeAd.getText("Caption"));
ImageView imageView = new ImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
customNativeAdBinding.mediaPlaceholder.addView(imageView);
// Render the ad choices icon.
renderAdChoices(customNativeAd);
// Record an impression.
customNativeAd.recordImpression();
}
}
Video gốc cho định dạng quảng cáo gốc tuỳ chỉnh
Khi tạo một định dạng tuỳ chỉnh, bạn có thể chọn để định dạng đó đủ điều kiện xuất hiện trong video.
Trong quá trình triển khai ứng dụng, bạn có thể dùng CustomNativeAd.getMediaContent() để lấy nội dung nghe nhìn. Sau đó, gọi setMediaContent() để đặt nội dung nghe nhìn trên trung tâm nghe nhìn.
Nếu quảng cáo có nội dung nghe nhìn null, hãy lên kế hoạch thay thế để hiển thị quảng cáo mà không có video.
Ví dụ sau đây kiểm tra xem quảng cáo có nội dung video hay không và hiển thị hình ảnh thay thế nếu không có video:
Kotlin
private fun displayVideoCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
// Check whether the custom native ad has video content.
val mediaContent = customNativeAd.mediaContent
if (mediaContent != null && mediaContent.hasVideoContent) {
// Render the media content in a MediaView.
val mediaView = MediaView(context)
mediaView.mediaContent = mediaContent
customNativeAdBinding.mediaPlaceholder.addView(mediaView)
} else {
// Fall back to other assets defined on your custom native ad.
val imageView = ImageView(context)
imageView.adjustViewBounds = true
imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
customNativeAdBinding.mediaPlaceholder.addView(imageView)
}
// Record an impression.
customNativeAd.recordImpression()
}
Java
private void displayVideoCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
// Check whether the custom native ad has video content.
MediaContent mediaContent = customNativeAd.getMediaContent();
if (mediaContent != null && mediaContent.getHasVideoContent()) {
// Render the media content in a MediaView.
MediaView mediaView = new MediaView(context);
mediaView.setMediaContent(mediaContent);
customNativeAdBinding.mediaPlaceholder.addView(mediaView);
} else {
// Fall back to other assets defined on your custom native ad.
ImageView imageView = new ImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
customNativeAdBinding.mediaPlaceholder.addView(imageView);
}
// Record an impression.
customNativeAd.recordImpression();
}
Hãy xem phần Quảng cáo dạng video để biết thêm thông tin về cách bạn có thể tuỳ chỉnh trải nghiệm video của quảng cáo gốc tuỳ chỉnh.
Hiển thị biểu tượng Lựa chọn quảng cáo
Trong khuôn khổ Hỗ trợ Đạo luật Dịch vụ kỹ thuật số (DSA), quảng cáo đặt trước được phân phát ở Khu vực kinh tế Châu Âu (EEA) cần có biểu tượng Lựa chọn quảng cáo và một đường liên kết đến trang Thông tin về quảng cáo này của Google. Khi triển khai quảng cáo gốc tuỳ chỉnh, bạn có trách nhiệm hiển thị biểu tượng Lựa chọn quảng cáo. Bạn nên thực hiện các bước để kết xuất hình ảnh và thiết lập trình nghe lượt nhấp cho biểu tượng Lựa chọn quảng cáo khi kết xuất các thành phần quảng cáo chính.
Ví dụ sau đây giả định rằng bạn đã xác định một phần tử <ImageView /> trong hệ phân cấp view để lưu giữ biểu trưng AdChoices.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/adChoices"
android:layout_width="15dp"
android:layout_height="15dp"
android:adjustViewBounds="true"
android:contentDescription="AdChoices icon." />
</LinearLayout>
Các ví dụ sau đây hiển thị biểu tượng Lựa chọn quảng cáo và định cấu hình hành vi nhấp chuột thích hợp.
Kotlin
private fun renderAdChoices(customNativeAd: CustomNativeAd) {
// Render the AdChoices image.
val adChoiceAsset = customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
if (adChoiceAsset != null) {
customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.drawable)
customNativeAdBinding.adchoices.visibility = View.VISIBLE
customNativeAdBinding.adchoices.setOnClickListener {
// Handle click. See the next section for more details.
customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
}
} else {
customNativeAdBinding.adchoices.visibility = View.GONE
}
}
Java
private void renderAdChoices(CustomNativeAd customNativeAd) {
// Render the AdChoices image.
Image adChoiceAsset =
customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
if (adChoiceAsset != null) {
if (customNativeAdBinding != null) {
customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.getDrawable());
customNativeAdBinding.adchoices.setVisibility(View.VISIBLE);
customNativeAdBinding.adchoices.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handle click.
customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
}
});
}
} else {
if (customNativeAdBinding != null) {
customNativeAdBinding.adchoices.setVisibility(View.GONE);
}
}
}
Ghi lại lượt hiển thị và báo cáo lượt nhấp
Ứng dụng của bạn có trách nhiệm ghi lại các lượt hiển thị và báo cáo sự kiện nhấp chuột cho GMA Next-Gen SDK.
Ghi lại lượt hiển thị
Để ghi lại một lượt hiển thị cho quảng cáo gốc tuỳ chỉnh, hãy gọi phương thức recordImpression() của quảng cáo:
Kotlin
// Record an impression.
customNativeAd.recordImpression()
Java
// Record an impression.
customNativeAd.recordImpression();
Nếu ứng dụng của bạn vô tình gọi phương thức này hai lần cho cùng một quảng cáo, thì SDK sẽ tự động ngăn việc ghi lại một lượt hiển thị trùng lặp cho một yêu cầu duy nhất.
Báo cáo lượt nhấp
Để báo cáo cho SDK biết rằng một lượt nhấp đã xảy ra trên một khung hiển thị thành phần, hãy gọi phương thức performClick() của quảng cáo. Cung cấp tên của thành phần được nhấp vào bằng cách sử dụng cùng một chuỗi mà bạn đã xác định trong giao diện người dùng Ad Manager.
Kotlin
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
Java
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
Xin lưu ý rằng bạn không cần phải gọi phương thức này cho mỗi khung hiển thị được liên kết với quảng cáo. Ví dụ: Nếu bạn có một trường khác là "Chú thích" (bạn chỉ hiển thị mà không cho người dùng nhấp hay nhấn vào trường này), thì ứng dụng của bạn không cần gọi phương thức performClick cho chế độ xem của thành phần đó.
Phản hồi hành động nhấp tuỳ chỉnh
Khi một lượt nhấp được thực hiện trên một quảng cáo có định dạng tuỳ chỉnh, SDK có thể phản hồi theo 3 cách, theo thứ tự sau:
- Gọi
OnCustomClickListenernếu bạn cung cấp. - Đối với mỗi URL liên kết sâu của quảng cáo, hãy cố gắng tìm một trình phân giải nội dung và bắt đầu phân giải nội dung đầu tiên.
- Mở một trình duyệt rồi chuyển đến URL đích của quảng cáo.
Để triển khai một thao tác nhấp tuỳ chỉnh, hãy cung cấp một OnCustomClickListener:
Kotlin
customNativeAd.onCustomClickListener =
object : OnCustomClickListener {
override fun onCustomClick(assetName: String) {
// Perform your custom action.
}
}
Java
customNativeAd.setOnCustomClickListener(
new OnCustomClickListener() {
@Override
public void onCustomClick(@NonNull String assetName) {
// Perform your custom action.
}
});
Lúc đầu, có thể bạn sẽ thấy lạ khi có trình nghe lượt nhấp tuỳ chỉnh. Sau tất cả, ứng dụng của bạn chỉ cho SDK biết rằng đã xảy ra một lượt nhấp, vậy tại sao SDK lại báo cáo điều đó cho ứng dụng?
Luồng thông tin này hữu ích vì một số lý do, nhưng quan trọng nhất là nó cho phép SDK kiểm soát phản hồi đối với lượt nhấp. Ví dụ: SDK có thể tự động ping URL theo dõi của bên thứ ba đã được đặt cho mẫu quảng cáo và ngầm xử lý các nhiệm vụ khác mà không cần thêm bất kỳ mã nào.