Quảng cáo có tặng thưởng

Quảng cáo có tặng thưởng là những quảng cáo mà người dùng có tùy chọn tương tác để đổi lấy phần thưởng trong ứng dụng. Tài liệu hướng dẫn này trình bày cách tích hợp quảng cáo có tặng thưởng từ AdMob vào ứng dụng Unity. Hãy đọc một số câu chuyện thành công của khách hàng sau đây: 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

  • Plugin Unity 3.16.0 trở lên.
  • Hoàn thành các bước Bắt đầu sử dụng. Ứng dụng Unity của bạn phải nhập sẵn plugin Unity quảng cáo trên thiết bị di động của Google.

Tạo đối tượng quảng cáo có tặng thưởng

Quảng cáo có tặng thưởng do các đối tượng RewardedAd yêu cầu và hiển thị. Để hiển thị quảng cáo có tặng thưởng, trước tiên, bạn cần khởi tạo đối tượng RewardedAd bằng cách gọi hàm tạo với mã nhận dạng đơn vị quảng cáo dùng để tải quảng cáo. Bước này được minh họa trong đoạn mã sau:

Để tích hợp quảng cáo dễ dàng hơn bằng cách sử dụng Trình chỉnh sửa Unity, hãy thử Quy trình đặt quảng cáo (thử nghiệm) mới.

using UnityEngine.Events;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);
    }
}

Luôn kiểm tra bằng quảng cáo thử nghiệm

Khi tạo và thử nghiệm ứng dụng, hãy đảm bảo rằng bạn sử dụng quảng cáo thử nghiệm thay vì quảng cáo đang chạy thực tế. Chúng tôi sẽ tạm ngưng tài khoản của bạn nếu bạn không thực hiện việc này.

Cách dễ nhất để tải quảng cáo thử nghiệm là sử dụng ID đơn vị quảng cáo thử nghiệm dành riêng cho quảng cáo có tặng thưởng trên Android và iOS:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Các ID 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 chúng trong các ứng dụng của mình khi viết mã, thử nghiệm và gỡ lỗi. Bạn chỉ cần đảm bảo sẽ thay thế bằng ID đơn vị quảng cáo của riêng 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 của SDK quảng cáo trên thiết bị di động, hãy xem bài viết Quảng cáo thử nghiệm.

Tải quảng cáo

Để tải quảng cáo có tặng thưởng, hãy gọi phương thức loadAd() của đối tượng RewardedAd. Phương thức này yêu cầu một bản sao của AdRequest làm đối số.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }
}

Sự kiện quảng cáo

Để tùy chỉnh thêm hành vi của quảng cáo, bạn có thể dựa trên một số sự kiện trong quá trình hiển thị quảng cáo: tải, mở, đóng, và các sự kiện tương tự. Hãy theo dõi những sự kiện này bằng cách đăng ký một đại diện cho trình xử lý sự kiện thích hợp. Sự kiện quan trọng nhất là OnUserEarnedReward sẽ được gọi khi người dùng nhận được phần thưởng vì đã xem video. Bạn cũng có thể triển khai các sự kiện quảng cáo khác, như hiển thị dưới đây.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        string adUnitId;
        #if UNITY_ANDROID
            adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }
}

Sự kiện OnUserEarnedReward cung cấp các đối số sự kiện đặc biệt. Sự kiện này chuyển một bản sao của RewardTypeAmount mô tả phần thưởng người dùng nhận được:

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
     MonoBehaviour.print(
          "HandleRewardedAdRewarded event received for "
              + amount.ToString() + " " + type);
}

Các sự kiện quảng cáo có sẵn

OnAdLoaded
Được gọi khi quảng cáo đã tải xong.
OnAdFailedToLoad
Được gọi khi quảng cáo không tải được. Thuộc tính Message của AdErrorEventArgs được cung cấp sẽ mô tả loại lỗi xảy ra.
OnAdOpening
Được gọi khi quảng cáo hiển thị, che phủ màn hình của thiết bị. Đây là vị trí thích hợp để tạm dừng phát âm thanh ứng dụng hoặc vòng lặp trò chơi (nếu cần).
OnAdFailedToShow
Được gọi khi quảng cáo không thể hiển thị. Thuộc tính Message của AdErrorEventArgs được cung cấp sẽ mô tả loại lỗi xảy ra.
OnUserEarnedReward
Được gọi khi người dùng sẽ nhận được phần thưởng vì đã xem video. Thông số Reward mô tả phần thưởng sẽ trao cho người dùng.
OnAdClosed
Được gọi khi quảng cáo video có tặng thưởng bị đóng do người dùng nhấn vào biểu tượng đóng hoặc sử dụng nút quay lại. Nếu ứng dụng tạm dừng phát âm thanh hoặc vòng lặp trò chơi, thì đây là vị trí thích hợp để tiếp tục phát.

Hiển thị quảng cáo

Trước khi hiển thị quảng cáo có tặng thưởng cho người dùng, bạn cần hiển thị cho người dùng tùy chọn rõ ràng về việc xem nội dung quảng cáo có tặng thưởng để đổi lấy phần thưởng. Người dùng phải luôn có thể chọn xem hoặc không xem quảng cáo có tặng thưởng.

Để hiển thị quảng cáo có tặng thưởng, hãy kiểm tra phương thức IsLoaded() để xác minh rằng quảng cáo đã tải xong, sau đó gọi show(). Dưới đây là ví dụ về cách thực hiện:

private void UserChoseToWatchAd()
{
  if (this.rewardedAd.IsLoaded()) {
    this.rewardedAd.Show();
  }
}

Sử dụng OnAdClosed để tải trước quảng cáo có tặng thưởng tiếp theo

RewardedAd là đối tượng dùng một lần. Điều này có nghĩa là sau khi quảng cáo có tặng thưởng hiển thị, đối tượng không thể dùng để tải quảng cáo khác. Để yêu cầu một quảng cáo có tặng thưởng khác, bạn cần tạo đối tượng RewardedAd mới.

Cách tốt nhất là tải một quảng cáo có tặng thưởng khác trong sự kiện quảng cáo OnAdClosed để quảng cáo có tặng thưởng tiếp theo bắt đầu tải ngay khi quảng cáo trước đó bị đóng:

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void CreateAndLoadRewardedAd()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

...

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        this.CreateAndLoadRewardedAd();
    }
}

Tải nhiều quảng cáo có tặng thưởng

Để tải nhiều quảng cáo có tặng thưởng, hãy làm theo các bước đã nêu trong mục tạo đối tượng quảng cáo có tặng thưởngtải quảng cáo cho từng quảng cáo mà bạn định tải. Đoạn mã dưới đây trình bày cách tải hai quảng cáo có tặng thưởng cho hai vị trí quảng cáo riêng biệt.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;
    ...
    public void Start()
    {
        ...

        this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
        this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
    }

    public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
    {
        RewardedAd rewardedAd = new RewardedAd(adUnitId);

        rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        rewardedAd.LoadAd(request);
        return rewardedAd;
    }
}

Các tài nguyên khác

Mẫu

  • Mẫu HelloWorld — cách triển khai tối giản cho mọi định dạng quảng cáo

Các bước tiếp theo