Chia sẻ ý kiến phản hồi của bạn để giúp định hình lộ trình cải tiến SDK Quảng cáo của Google trên thiết bị di động. Hãy tham gia Khảo sát hằng năm về SDK Quảng cáo của Google trên thiết bị di động năm 2023 trước khi cuộc khảo sát kết thúc vào ngày 5 tháng 5 năm 2023.

Quảng cáo gốc nâng cao (Hợp nhất)

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Tài liệu hướng dẫn này trình bày cách sử dụng plugin Unity quảng cáo trên thiết bị di động của Google để triển khai Quảng cáo gốc nâng cao của AdMob trong ứng dụng Unity, cũng như một số điểm quan trọng cần xem xét trong suốt quá trình triển khai.

Quảng cáo gốc phù hợp với cả hình thức và chức năng của trải nghiệm người dùng mà quảng cáo được đặt. Các quảng cáo này cũng phù hợp với thiết kế trực quan của ứng dụng mà chúng hiển thị. Định dạng quảng cáo gốc nâng cao của AdMob cho phép nhà xuất bản hiển thị những quảng cáo liền mạch với nội dung. Bạn có thể sử dụng công nghệ này để triển khai các tính năng hiển thị có khả năng tùy chỉnh cao giúp tận dụng tối đa mã gốc trong các ứng dụng Unity.

Quảng cáo gốc nâng cao được hiển thị bằng cách sử dụng các loại GameObjects tương tự như loại mà bạn đã tạo ứng dụng và có thể được định dạng cho phù hợp với thiết kế trực quan của trải nghiệm người dùng mà quảng cáo đang hiển thị. Khi quảng cáo gốc tải, ứng dụng của bạn sẽ nhận được đối tượng gốc chứa nội dung và ứng dụng Unity (thay vì SDK) sẽ hiển thị các nội dung đó.

Có hai nội dung mô tả trường quảng cáo gốc nâng cao chuẩn: lượt cài đặt ứng dụng và nội dung. Cả hai nội dung này đều được biểu thị bằng UnifiedNativeAd và đối tượng này chứa phần tử dành cho quảng cáo gốc. Một số phần tử có thể không hiển thị, vì vậy, hãy kiểm tra sự hiện diện của các phần tử đó trước khi hiển thị. Hãy đọc các câu chuyện thành công của khách hàng: nghiên cứu điển hình 1, nghiên cứu điển hình 2.

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

Tải các định dạng quảng cáo gốc

Hệ thống tải Quảng cáo gốc nâng cao thông qua lớp AdLoader. Lớp này có lớp AdLoader.Builder riêng để tùy chỉnh quảng cáo trong quá trình tạo. Phương thức ForUnifiedNativeAd() sẽ định cấu hình AdLoader để xử lý quảng cáo gốc hợp nhất .

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForUnifiedNativeAd()
        .Build();
}

Đăng ký sự kiện quảng cáo AdLoader

Để được thông báo khi quảng cáo gốc nâng cao tải thành công hoặc không thể tải, hãy thêm ủy quyền vào lớp AdLoader cho các sự kiện được liệt kê bên dưới.

OnUnifiedNativeAdLoaded
Được gọi khi quảng cáo gốc hợp nhất đã tải thành công. Bắt buộc phải có đại biểu cho sự kiện này để truy cập vào quảng cáo đã tải.
OnAdFailedToLoad
Được gọi khi quảng cáo gốc không thể tải.

Tải quảng cáo

Sau khi bạn đã tạo xong AdLoader, hãy gọi phương thức LoadAd() để yêu cầu quảng cáo:

adLoader.LoadAd(new AdRequest.Builder().Build());

Đồng thời, hãy tạo yêu cầu quảng cáo

Đoạn mã bên dưới minh họa cách tạo AdLoader được định cấu hình để yêu cầu quảng cáo gốc hợp nhất , đặt ủy quyền cho các lượt tải quảng cáo thành công và không thành công, đồng thời tạo yêu cầu quảng cáo.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForUnifiedNativeAd()
        .Build();
    adLoader.OnUnifiedNativeAdLoaded += this.HandleUnifiedNativeAdLoaded;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

Xử lý các lượt tải quảng cáo không thành công

Sự kiện OnAdFailedToLoad thuộc loại EventHandler<AdFailedToLoadEventArgs>. Dưới đây là lý do sự kiện này tải quảng cáo không thành công.

private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
    MonoBehaviour.print("Native ad failed to load: " + args.Message);
}

Hiển thị quảng cáo

Khi Quảng cáo gốc nâng cao tải, sự kiện quảng cáo cho định dạng quảng cáo tương ứng sẽ được gọi. Sau đó, ứng dụng của bạn chịu trách nhiệm về việc hiển thị quảng cáo, mặc dù ứng dụng không nhất thiết phải thực hiện ngay công việc đó.

Xử lý lượt tải quảng cáo

Sự kiện OnUnifiedNativeAdLoaded thuộc loại EventHandler<UnifiedNativeAdEventArgs>. Bạn có thể truy xuất quảng cáo được đóng gói trong đối tượng UnifiedNativeAd từ UnifiedNativeAdEventArgs như sau:

private UnifiedNativeAd nativeAd;
...
private void HandleUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args) {
    MonoBehaviour.print("Unified Native ad loaded.");
    this.nativeAd = args.nativeAd;
}

Truy xuất tài sản quảng cáo gốc

Sau khi quảng cáo đã tải, bạn có thể truy cập vào nội dung của các quảng cáo đó như được hiển thị dưới đây. Nội dung đồ họa được trả lại dưới dạng đối tượng Texture2D và nội dung văn bản được trả lại dưới dạng đối tượng string.

private bool unifiedNativeAdLoaded;
private UnifiedNativeAd nativeAd;
...
void Update() {
    ...

    if (this.unifiedNativeAdLoaded) {
        this.unifiedNativeAdLoaded = false;
        // Get Texture2D for icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        // Get string for headline asset of native ad.
        string headline = this.nativeAd.GetHeadlineText();
    }
}
...

private void HandleUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args) {
    MonoBehaviour.print("Unified native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.unifiedNativeAdLoaded = true;
}

Lưu ý rằng bạn chỉ nên truy cập vào nội dung quảng cáo trên chuỗi chính, ví dụ: từ phương thức Update() của tập lệnh Unity. Ngoài ra, hãy lưu ý rằng không phải lúc nào các nội dung sau cũng hiển thị và bạn phải kiểm tra trước khi hiển thị các nội dung đó:

  • GetStarRating()
  • GetStore()
  • GetPrice()
  • GetAdvertiser()
  • GetIconTexture()

Tài sản Lựa chọn quảng cáo

Đó là yêu cầu để hiển thị nội dung quảng cáo Lựa chọn quảng cáo dưới dạng một phần của Quảng cáo gốc nâng cao. Ngoài ra, điều quan trọng là nội dung quảng cáo AdChoices phải dễ thấy, vì vậy, hãy chọn màu nền và hình ảnh phù hợp.

Đăng ký GameObjects cho tài sản quảng cáo

Đối với mỗi nội dung quảng cáo sẽ hiển thị, bạn phải đăng ký sử dụng GameObject để hiển thị nội dung trong ứng dụng Unity. Mọi phương thức để đăng ký GameObject cho một nội dung quảng cáo sẽ trả lại một bool cho biết việc đăng ký có thành công hay không. Nếu việc đăng ký nội dung quảng cáo không thành công, các lượt hiển thị và lượt nhấp trên quảng cáo gốc tương ứng sẽ không được công nhận.

if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
    // Handle failure to register ad asset.
}

GameObject được đăng ký cho một nội dung quảng cáo phải có thành phần Collider lồi đại diện cho kích thước và hình dạng của GameObject. Nếu các đối tượng GameObject đã đăng ký cho nội dung quảng cáo bị thiếu thành phần Collider hoặc có thành phần bị định cấu hình sai, thì quảng cáo gốc nâng cao sẽ hoạt động không đúng cách.

Trong đoạn mã dưới đây, BoxCollider được thêm vào GameObject, trong đó sử dụng TextMesh để hiển thị nội dung quảng cáo dòng tiêu đề của quảng cáo gốc . Sau khi đính kèm BoxCollider vào GameObject, đối tượng sẽ tự động chuyển tỉ lệ để phù hợp với văn bản của thành phần TextMesh.

// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;

// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;

// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();

Bản minh họa

Mã sau đây minh họa cách truy xuất nội dung biểu tượng của quảng cáo gốc đã tải thành công, hiển thị nội dung biểu tượng của quảng cáo bằng cách đặt họa tiết của Quad và đăng ký sử dụng GameObject để hiển thị nội dung đó. Bạn nên lặp lại quy trình truy xuất nội dung quảng cáo này và đăng ký nội dung đó với lớp quảng cáo gốc cho từng nội dung mà ứng dụng hiển thị.

private GameObject icon;
private bool unifiedNativeAdLoaded;
private UnifiedNativeAd nativeAd;
...
void Update() {
    ...

    if (this.unifiedNativeAdLoaded) {
        this.unifiedNativeAdLoaded = false;
        // Get Texture2D for icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
        icon.transform.position = new Vector3(1, 1, 1);
        icon.transform.localScale = new Vector3(1, 1, 1);
        icon.GetComponent<Renderer>().material.mainTexture = iconTexture;

        // Register GameObject that will display icon asset of native ad.
        if (!this.nativeAd.RegisterIconImageGameObject(icon))
        {
            // Handle failure to register ad asset.
        }
    }
}
...

private void HandleUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args) {
    MonoBehaviour.print("Unified native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.unifiedNativeAdLoaded = true;
}