Quảng cáo gốc nâng cao

Hiển thị NativeAd

Khi một quảng cáo gốc tải, SDK quảng cáo trên thiết bị di động của Google sẽ gọi trình nghe để định dạng quảng cáo tương ứng. Sau đó, ứng dụng sẽ chịu trách nhiệm hiển thị quảng cáo (mặc dù ứng dụng không nhất thiết phải làm việc đó ngay lập tức). Để hiển thị định dạng quảng cáo do hệ thống xác định dễ dàng hơn, SDK sẽ cung cấp một số tài nguyên hữu ích, như được mô tả bên dưới.

Lớp NativeAdView

Đối với định dạng NativeAd, sẽ có giá trị tương ứng NativeAdView . Lớp này là một ViewGroup mà nhà xuất bản phải sử dụng làm lớp gốc cho NativeAd. Một NativeAdView sẽ tương ứng với một quảng cáo gốc. Mỗi chế độ xem được dùng để hiển thị nội dung của quảng cáo đó (ImageView hiển thị thành phần ảnh chụp màn hình) phải là phần tử con của NativeAdView .

Hệ phân cấp khung hiển thị cho một quảng cáo gốc sử dụng LinearLayout để hiển thị lượt xem nội dung có thể có dạng như sau:

<com.google.android.gms.ads.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical">
        <LinearLayout
        android:orientation="horizontal">
          <ImageView
           android:id="@+id/ad_app_icon" />
          <TextView
            android:id="@+id/ad_headline" />
         </LinearLayout>
         <!--Add remaining assets such as the image and media view.-->
    </LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>

Dưới đây là ví dụ sẽ tạo NativeAdView và sẽ điền NativeAd vào đó:

Java

AdLoader.Builder builder = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Assumes you have a placeholder FrameLayout in your View layout
            // (with ID fl_adplaceholder) where the ad is to be placed.
            FrameLayout frameLayout =
                findViewById(R.id.fl_adplaceholder);
            // Assumes that your ad layout is in a file call native_ad_layout.xml
            // in the res/layout folder
            NativeAdView adView = (NativeAdView) getLayoutInflater()
                .inflate(R.layout.native_ad_layout, null);
            // This method sets the assets into the ad view.
            populateNativeAdView(nativeAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
});

Kotlin

val builder = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with ID fl_adplaceholder) where the ad is to be placed.
        val frameLayout: FrameLayout = findViewById(R.id.fl_adplaceholder)
        // Assumes that your ad layout is in a file call native_ad_layout.xml
        // in the res/layout folder
        val adView = layoutInflater
                .inflate(R.layout.native_ad_layout, null) as NativeAdView
        // This method sets the assets into the ad view.
        populateNativeAdView(nativeAd, adView)
        frameLayout.removeAllViews()
        frameLayout.addView(adView)
    }

Xin lưu ý rằng tất cả thành phần của một quảng cáo gốc nhất định phải hiển thị bên trong bố cục NativeAdView. SDK Quảng cáo của Google trên thiết bị di động cố gắng ghi lại một cảnh báo khi thành phần quảng cáo gốc hiển thị bên ngoài bố cục chế độ xem quảng cáo gốc.

Các lớp chế độ xem quảng cáo cũng cung cấp phương thức dùng để đăng ký chế độ xem được sử dụng cho từng thành phần riêng lẻ và một phương thức để đăng ký chính đối tượng NativeAd. Việc đăng ký các thành phần hiển thị theo cách này cho phép SDK tự động xử lý các công việc, chẳng hạn như:

  • Ghi lại lượt nhấp
  • Ghi lại số lượt hiển thị khi pixel đầu tiên hiển thị trên màn hình
  • Hiển thị lớp phủ Lựa chọn quảng cáo

Lớp phủ Lựa chọn quảng cáo

SDK sẽ thêm lớp phủ Lựa chọn quảng cáo vào mỗi chế độ xem quảng cáo. Để khoảng trống trong góc ưa thích trong chế độ xem quảng cáo gốc cho biểu trưng Lựa chọn quảng cáo được chèn tự động. Ngoài ra, lớp phủ Lựa chọn quảng cáo phải trông thật dễ nhìn, vì vậy, hãy chọn màu nền và hình ảnh phù hợp. Để biết thêm thông tin về giao diện của lớp phủ và chức năng, xem trường Quảng cáo gốc nội dung mô tả.

Thuộc tính quảng cáo

Bạn phải hiển thị một thuộc tính quảng cáo để biểu thị rằng lượt xem đó là một quảng cáo. Tìm hiểu thêm trong chính sách của chúng tôi nguyên tắc.

Ví dụ về mã

Dưới đây là các bước cần thực hiện để hiển thị quảng cáo gốc:

  1. Tạo một thực thể của lớp NativeAdView.
  2. Đối với mỗi thành phần quảng cáo sẽ hiển thị:

    1. Điền tài sản trong đối tượng quảng cáo vào chế độ xem tài sản.
    2. Đăng ký chế độ xem thành phần bằng lớp NativeAdView.
  3. Đăng ký MediaView nếu bố cục quảng cáo gốc của bạn bao gồm một nội dung nghe nhìn lớn.

  4. Đăng ký đối tượng quảng cáo bằng lớp NativeAdView.

Dưới đây là một hàm mẫu sẽ hiển thị NativeAd:

Java

private void displayNativeAd(ViewGroup parent, NativeAd ad) {

  // Inflate a layout and add it to the parent ViewGroup.
  LayoutInflater inflater = (LayoutInflater) parent.getContext()
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  NativeAdView adView = (NativeAdView) inflater
          .inflate(R.layout.ad_layout_file, parent);

  // Locate the view that will hold the headline, set its text, and call the
  // NativeAdView's setHeadlineView method to register it.
  TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
  headlineView.setText(ad.getHeadline());
  adView.setHeadlineView(headlineView);

  // Repeat the process for the other assets in the NativeAd
  // using additional view objects (Buttons, ImageViews, etc).

  // If the app is using a MediaView, it should be
  // instantiated and passed to setMediaView. This view is a little different
  // in that the asset is populated automatically, so there's one less step.
  MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
  adView.setMediaView(mediaView);

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad);

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews();

  // Place the AdView into the parent.
  parent.addView(adView);
}

Kotlin

fun displayNativeAd(parent: ViewGroup, ad: NativeAd) {

  // Inflate a layout and add it to the parent ViewGroup.
  val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
          as LayoutInflater
  val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView

  // Locate the view that will hold the headline, set its text, and use the
  // NativeAdView's headlineView property to register it.
  val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
  headlineView.text = ad.headline
  adView.headlineView = headlineView

  // Repeat the process for the other assets in the NativeAd using
  // additional view objects (Buttons, ImageViews, etc).

  val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
  adView.mediaView = mediaView

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad)

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews()

  // Place the AdView into the parent.
  parent.addView(adView)
}

Sau đây là từng nhiệm vụ:

  1. Tăng cường bố cục

    Java

    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeAdView adView = (NativeAdView) inflater
            .inflate(R.layout.ad_layout_file, parent);
    

    Kotlin

    val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
            as LayoutInflater
    val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView
    

    Mã này đang tăng cường sử dụng bố cục XML có chứa các chế độ xem để hiển thị quảng cáo gốc, sau đó định vị một mục tham chiếu đến NativeAdView. Xin lưu ý rằng bạn cũng có thể sử dụng lại NativeAdView hiện có nếu chế độ xem đó có trong mảnh hoặc hoạt động của bạn, hay thậm chí là tự động tạo một bản sao mà không cần sử dụng tệp bố cục.

  2. Điền và đăng ký chế độ xem thành phần

    Mã mẫu này định vị chế độ xem được dùng để hiển thị dòng tiêu đề, đặt văn bản của dòng tiêu đề đó sử dụng nội dung chuỗi do đối tượng quảng cáo cung cấp và đăng ký nội dung đó với Đối tượng NativeAdView:

    Java

    TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
    headlineView.setText(ad.getHeadline());
    adView.setHeadlineView(headlineView);
    

    Kotlin

    val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
    headlineView.text = ad.headline
    adView.headlineView = headlineView
    

    Quy trình này bao gồm việc xác định vị trí chế độ xem, đặt giá trị chế độ xem cũng như đăng ký chế độ xem đó bằng lớp chế độ xem quảng cáo. Quy trình này sẽ lặp lại cho từng thành phần của đối tượng quảng cáo gốc mà ứng dụng sẽ hiển thị.

  3. Xử lý lượt nhấp

    Không triển khai bất kỳ trình xử lý lượt nhấp tuỳ chỉnh nào trên mọi khung hiển thị ở trên hoặc trong chế độ xem quảng cáo gốc. SDK sẽ xử lý số lượt nhấp vào tài sản chế độ xem quảng cáo, miễn là bạn điền và đăng ký chính xác chế độ xem tài sản như đã nêu ở mục trước đó.

    Để nghe lần nhấp, hãy triển khai lệnh gọi lại lần nhấp vào SDK Quảng cáo của Google trên thiết bị di động:

    Java

    AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
        // ...
        .withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
                // Handle the failure by logging.
            }
            @Override
            public void onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build();
    

    Kotlin

    val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        // ...
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(adError: LoadAdError) {
                // Handle the failure.
            }
            override fun onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build()
    
  4. Đăng ký MediaView

    Bạn bắt buộc phải sử dụng thành phần MediaView thay vì thành phần ImageView nếu muốn đưa thành phần hình ảnh chính vào bố cục cho quảng cáo gốc.

    MediaView là một View đặc biệt được thiết kế để hiển thị nội dung nghe nhìn chính, video hoặc hình ảnh.

    MediaView có thể được xác định trong bố cục XML hoặc được tạo động. Nó phải được đặt bên trong hệ phân cấp khung hiển thị của NativeAdView, giống như bất kỳ chế độ xem nội dung khác. Các ứng dụng sử dụng MediaView phải đăng ký tài khoản này với NativeAdView:

    Java

     // Populate and register the media asset view.
     nativeAdView.setMediaView(nativeAdBinding.adMedia);
    

    Kotlin

     // Populate and register the media asset view.
     nativeAdView.mediaView = nativeAdBinding.adMedia
    

    ImageScaleType

    Lớp MediaView có thuộc tính ImageScaleType khi hiển thị hình ảnh. Nếu bạn muốn thay đổi cách chuyển tỉ lệ hình ảnh trong MediaView, hãy đặt ImageView.ScaleType tương ứng bằng cách sử dụng phương thức setImageScaleType() của MediaView:

    Java

    mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
    

    Kotlin

    mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP
    

    MediaContent

    Lớp MediaContent chứa dữ liệu liên quan đến nội dung đa phương tiện của quảng cáo gốc được hiển thị bằng cách sử dụng lớp MediaView. Khi Thuộc tính MediaView mediaContent được đặt bằng một thực thể MediaContent:

    • Nếu có thành phần video, thì video đó sẽ được lưu vào vùng đệm và bắt đầu phát bên trong MediaView. Bạn có thể biết liệu quảng cáo có chứa thành phần video hay không bằng cách chọn hasVideoContent().

    • Nếu quảng cáo không chứa thành phần video thì thành phần mainImage sẽ được tải xuống và được đặt bên trong MediaView.

    Theo mặc định, mainImage là thành phần hình ảnh được tải xuống đầu tiên. Nếu sử dụng setReturnUrlsForImageAssets(true), thì mainImage sẽ là null và bạn phải đặt thuộc tính mainImage này cho hình ảnh tải xuống theo cách thủ công. Xin lưu ý rằng hệ thống sẽ chỉ sử dụng hình ảnh này khi không có sẵn nội dung video.

  5. Đăng ký đối tượng quảng cáo gốc

    Bước cuối cùng này sẽ đăng ký đối tượng quảng cáo gốc với chế độ xem chịu trách nhiệm hiển thị đối tượng đó.

    Java

    adView.setNativeAd(ad);
    

    Kotlin

    adView.setNativeAd(ad)
    

Huỷ bỏ quảng cáo

Khi hiển thị xong quảng cáo gốc, bạn nên huỷ bỏ quảng cáo đó để quảng cáo là nơi thu gom rác đúng cách.

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

Ví dụ trên GitHub

Ví dụ về cách triển khai đầy đủ quảng cáo gốc:

Java Kotlin

Các bước tiếp theo

Khám phá các chủ đề sau: