Bắt đầu

Hướng dẫn này trình bày cách sử dụng tiện ích bổ sung cho quảng cáo gốc để triển khai quảng cáo gốc AdMob trên ứng dụng Unity. Hướng dẫn cũng cung cấp một số thông tin quan trọng cần lưu ý trong 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 của AdMob giú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 tính năng hiển thị có khả năng tuỳ chỉnh cao và khai thác tối đa mã gốc trong các ứng dụng Unity.

Quảng cáo gố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 đang dùng để xây dựng ứng dụng. Quảng cáo gốc có thể được định dạng cho phù hợp với kiểu thiết kế trực quan của trải nghiệm người dùng có quảng cáo. Khi quảng cáo gốc tải, ứng dụng sẽ nhận được một đối tượng gốc chứa các thành phần của quảng cáo đó và ứng dụng Unity (chứ không phải SDK) sẽ hiển thị các thành phần đó.

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

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

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

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

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

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

OnNativeAdLoaded

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

OnAdFailedToLoad

Được gọi khi không tải được quảng cáo gốc.

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());

Tạo yêu cầu quảng cáo

Đoạn mã dưới đây minh hoạ cách tạo một AdLoader được định cấu hình để yêu cầu quảng cáo gốc, đặt uỷ nhiệm hàm cho các lượt tải quảng cáo thành công và không thành công, cũng như tạo yêu cầu quảng cáo.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
    adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
    adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

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

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

private void RequestNativeAd() {
    ...
    adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}

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

Hiển thị quảng cáo gốc

Khi một Quảng cáo gốc 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 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).

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

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

private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
}

Truy xuất thành phần quảng cáo gốc

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

private bool nativeAdLoaded;
private NativeAd nativeAd;

void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for the 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 HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}

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

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

Thành phần Lựa chọn quảng cáo

Thành phần quảng cáo Lựa chọn quảng cáo phải hiển thị dưới dạng một phần của quảng cáo gốc. Ngoài ra, thành phần quảng cáo Lựa chọn quảng cáo cũng 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 thành phần quảng cáo

Bạn phải đăng ký GameObject để thành phần quảng cáo hiển thị trong ứng dụng Unity. Nếu đăng ký thành công, phương thức dùng để đăng ký GameObject sẽ trả về một bool. Đối với List<GameObject>, phương thức này trả về một int cho biết số lượng GameObject đã đăng ký thành công.

Nếu việc đăng ký thành phần quảng cáo không thành công, thì 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 the icon ad asset.
}

GameObject được đăng ký cho một thành phần 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 thành phần quảng cáo bị thiếu thành phần Collider hoặc thành phần đó được định cấu hình không chính xác, thì quảng cáo gốc 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ị thành phần 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 điều chỉnh tỷ lệ cho 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 hoạ

Đoạn mã sau đây minh hoạ cách truy xuất thành phần biểu tượng của một quảng cáo gốc đã tải thành công, hiển thị thành phần biểu tượng của quảng cáo bằng cách đặt cấu trúc là Quad, rồi đăng ký GameObject để hiển thị thành phần này. Bạn cần lặp lại quy trình truy xuất thành phần quảng cáo này và đăng ký thành phần đó với lớp quảng cáo gốc cho từng thành phần mà ứng dụng hiển thị.

private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = 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 HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}