Quảng cáo có tặng thưởng dạng video (API cũ)

Quảng cáo có tặng thưởng dạng video là quảng cáo dạng video toàn màn hình mà người dùng có thể chọn xem toàn bộ video để nhận thưởng trong ứng dụng.

Hướng dẫn này cho bạn biết cách tích hợp quảng cáo video có tặng thưởng từ AdMob vào ứng dụng Unity.

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

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 plugin Unity quảng cáo trên thiết bị di động của Google.

Tham chiếu đến bản sao singleton

Để hiển thị quảng cáo video có tặng thưởng, trước tiên, bạn cần tham chiếu đến bản sao singleton RewardBasedVideoAd. Bạn có thể lấy tệp tham chiếu này bằng cách gọi RewardBasedVideoAd.Instance.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(initStatus => { });

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    }
}

Tải quảng cáo

RewardedBasedVideoAd là singleton, nên bạn phải yêu cầu tải quảng cáo bằng một bản sao được chia sẻ.

Bạn nên gọi LoadAd() càng sớm càng tốt (ví dụ: trong phương thức Start() của tập lệnh đính kèm với GameObject) để cho phép tải trước video, như hiển thị bên dưới.

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(initStatus => { });

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

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

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

Mã mẫu ở trên chứa một mã đơn vị quảng cáo và bạn có thể yêu cầu quảng cáo bằng mã đơn vị quảng cáo đó. Mã này được định cấu hình đặc biệt để trả về quảng cáo thử nghiệm thay vì quảng cáo thực tế cho mọi yêu cầu, đó là lý do mã này rất an toàn khi sử dụng.

Tuy nhiên, sau khi đăng ký một ứng dụng trong giao diện người dùng AdMob và tạo ID đơn vị quảng cáo của riêng mình để sử dụng trong ứng dụng, bạn cần định cấu hình thiết bị làm thiết bị thử nghiệm một cách rõ ràng khi bạn đang phát triển. Điều này cực kỳ quan trọng. Việc thử nghiệm bằng quảng cáo thực (ngay cả khi bạn không bao giờ nhấn vào quảng cáo) là hành vi vi phạm chính sách của AdMob và có thể khiến tài khoản của bạn bị tạm ngưng. Hãy xem phần Quảng cáo thử nghiệm để biết cách đảm bảo bạn luôn nhận được quảng cáo thử nghiệm trong quá trình phát triển.

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 vòng đời của quảng cáo: tải, mở, đóng, v.v. Hãy theo dõi những sự kiện này bằng cách đăng ký một đại diện cho EventHandler thích hợp. Hệ thống sẽ gọi sự kiện quan trọng nhất là OnAdRewarded 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 RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

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

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

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

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

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

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

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

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

Sự kiện OnAdRewarded chứa 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 HandleRewardBasedVideoRewarded(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    print("User rewarded with: " + amount.ToString() + " " + type);
}

Sự kiện OnAdFailedToLoad cũng chứa các đối số sự kiện đặc biệt. Sự kiện này chuyển một bản sao của HandleAdFailedToLoadEventArgsMessage mô tả lỗi:

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
  print("Rewarded video ad failed to load: " + args.Message);
  // Handle the ad failed to load event.
}
Sự kiện quảng cáoNội dung mô tả
OnAdLoaded Sự kiện OnAdLoaded được gọi khi quảng cáo tải xong.
OnAdFailedToLoad Sự kiện OnAdFailedToLoad được gọi khi quảng cáo không tải được. Tham số Message mô tả loại lỗi đã xảy ra.
OnAdOpening Phương thức này được gọi khi quảng cáo hiển thị, bao phủ màn hình của thiết bị. Nếu bạn đang sử dụng một gói phân tích để theo dõi các lần nhấp qua, thì đây là phương thức rất phù hợp để ghi lại.
OnAdStarted Phương thức này được gọi khi quảng cáo bắt đầu phát
OnAdRewarded Phương thức này được gọi khi người dùng được thưởng vì đã xem video. Tham số Reward mô tả phần thưởng mà người dùng sẽ nhận được.
OnAdClosed Phương thức này được gọi khi người dùng nhấn vào biểu tượng đóng hoặc dùng nút quay lại để đóng quảng cáo dạng video có tặng thưởng. 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.
OnAdLeavingApplication Phương thức này được gọi sau OnAdOpened, khi thao tác nhấp của người dùng mở ứng dụng khác (chẳng hạn như Cửa hàng Google Play) và chuyển ứng dụng hiện tại sang chạy ở chế độ nền.

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 đưa ra lựa 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 video có tặng thưởng, hãy sử dụng phương thức IsLoaded() để xác minh rằng quảng cáo đã tải xong, sau đó gọi Show().

Đoạn mã sau đây minh họa cách hiển thị quảng cáo video có tặng thưởng.

private void UserOptToWatchAd()
{
  if (rewardBasedVideo.IsLoaded()) {
    rewardBasedVideo.Show();
  }
}

Tải lại quảng cáo

Sự kiện OnAdClosed là nơi thuận tiện để tải quảng cáo video có tặng thưởng mới sau khi hiển thị quảng cáo video có tặng thưởng trước đó:

public void Start()
{
    this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
}

public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
    this.RequestRewardBasedVideo();
}

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