Thêm quảng cáo video kèm phần thưởng vào ứng dụng Unity

Audience Network giúp bạn kiếm tiền từ ứng dụng của mình trên Android và iOS bằng quảng cáo trên Facebook. Quảng cáo video kèm phần thưởng là trải nghiệm toàn màn hình, trong đó người dùng chọn xem quảng cáo video để đổi lấy thứ gì đó có giá trị, chẳng hạn như tiền ảo, vật phẩm trong ứng dụng, nội dung độc quyền, v.v. Trải nghiệm quảng cáo là một video ngắn và một thẻ kết thúc có nút kêu gọi hành động. Sau khi người dùng xem xong toàn bộ video, bạn sẽ nhận được lệnh gọi lại yêu cầu trao phần thưởng đề xuất cho người dùng.

Đảm bảo bạn đã hoàn tất hướng dẫn Bắt đầu với Audience Network và Bắt đầu với Unity trước khi tiếp tục.

Các bước dành cho quảng cáo video kèm phần thưởng

Bước 1: Khởi tạo quảng cáo video kèm phần thưởng

Bước 2: Thêm sự kiện gọi lại

Bước 3: Tải quảng cáo

Bước 4: Hiển thị quảng cáo

Bước 1: Khởi tạo quảng cáo video kèm phần thưởng

Bước đầu tiên trong việc hiển thị quảng cáo video kèm phần thưởng là tạo một đối tượng RewardedVideoAd trong tập lệnh C# được đính kèm vào GameObject.

...
using AudienceNetwork;
...

public class RewardedVideoAdTest : MonoBehaviour
{
    public void LoadRewardedVideo()
    {
        // Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings).
        // Use different ID for each ad placement in your app.
        this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID");

        this.rewardedVideoAd.Register(this.gameObject);

        // Set delegates to get notified on changes or when the user interacts with the ad.
        this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
            Debug.Log("RewardedVideo ad loaded.");
            this.isLoaded = true;
        });
        this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
            Debug.Log("RewardedVideo ad failed to load with error: " + error);
        });
        this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
            Debug.Log("RewardedVideo ad logged impression.");
        });
        this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
            Debug.Log("RewardedVideo ad clicked.");
        });

        this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
            Debug.Log("Rewarded video ad did close.");
            if (this.rewardedVideoAd != null) {
                this.rewardedVideoAd.Dispose();
            }
        });

        // Initiate the request to load the ad.
        this.rewardedVideoAd.LoadAd();
    }
}

Hàm dựng cho RewardedVideoAd có các thông số sau:

  • placementId – ID vị trí quảng cáo trên Audience Network cho đơn vị quảng cáo video kèm phần thưởng này.

Bước 2: Thêm sự kiện gọi lại

Tiếp theo, bạn có thể triển khai một số lệnh gọi lại để đăng ký các sự kiện vòng đời của quảng cáo. Hãy theo dõi các sự kiện này bằng cách đăng ký một người được ủy quyền cho sự kiện, như minh họa trong ví dụ bên dưới:

...
// Set delegates to get notified on changes or when the user interacts with the ad.
this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
    Debug.Log("RewardedVideo ad loaded.");
    this.isLoaded = true;
});
this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
    Debug.Log("RewardedVideo ad failed to load with error: " + error);
});
this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
    Debug.Log("RewardedVideo ad logged impression.");
});
this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
    Debug.Log("RewardedVideo ad clicked.");
});

this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
    Debug.Log("Rewarded video ad did close.");
    if (this.rewardedVideoAd != null) {
        this.rewardedVideoAd.Dispose();
    }
});
...

Lệnh gọi lại cho hoạt động quảng cáo đã triển khai trong Unity Android

Phần này chỉ liên quan đến Android.

Hiện tại, trò chơi Unity dành cho Android chỉ hỗ trợ Activity Unity chính để có launchMode của singleTask. Xem tài liệu Unity dành cho tệp kê khai Androidtài liệu Android dành cho hoạt động.

Vì chúng tôi sử dụng Activity để hiển thị quảng cáo InterstitialRewarded Video nên hoạt động quảng cáo có thể được triển khai mà không cần đóng đúng cách khi người dùng chạy một ứng dụng dưới nền rồi khởi chạy lại ứng dụng đó bằng biểu tượng - chứ không dùng trình chuyển ứng dụng. Bạn có thể sử dụng các lệnh gọi lại sau và kiểm tra xem người dùng đã đóng quảng cáo hay chưa:

Đối với quảng cáo chèn giữa:

this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* * Only relevant to Android. * This callback will only be triggered if the Interstitial activity has * been destroyed without being properly closed. This can happen if an * app with launchMode:singleTask (such as a Unity game) goes to * background and is then relaunched by tapping the icon. */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif 

Đối với quảng cáo video kèm phần thưởng:

this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* * Only relevant to Android. * This callback will only be triggered if the Rewarded Video activity * has been destroyed without being properly closed. This can happen if * an app with launchMode:singleTask (such as a Unity game) goes to * background and is then relaunched by tapping the icon. */ this.rewardedVideoAd.rewardedVideoAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Rewarded video activity destroyed without being closed first."); Debug.Log("Game should resume. User should not get a reward."); } }); #endif 

Bước 3: Tải quảng cáo

Sau khi RewardedVideoAd được thực thể hóa, bước tiếp theo là tải quảng cáo. Bước này được thực hiện bằng cách gọi phương thức loadAd.

Trong ví dụ minh họa bên trên, cách bắt đầu tải quảng cáo sẽ như sau:

...
this.rewardedVideoAd.LoadAd();
...

Bước 4: Hiển thị quảng cáo

Cuối cùng, sau khi quảng cáo được tải, bạn có thể gọi phương thức Show để hiển thị quảng cáo video kèm phần thưởng đó trên màn hình. Ví dụ: bạn có thể tạo một hàm cho ShowRewardedVideo và gọi hàm này khi đến thời điểm cần hiển thị quảng cáo:

public void ShowRewardedVideo()
{
    if (this.isLoaded) {
        this.rewardedVideoAd.Show();
        this.isLoaded = false;
    } else {
        Debug.Log("Ad not loaded. Click load to request an ad.");
    }
}

Xác thực phần thưởng phía máy chủ

Đây là tùy chọn! Bạn không phải thực hiện xác thực phần thưởng phía máy chủ để sử dụng quảng cáo video kèm phần thưởng. Bạn chỉ phải làm điều này nếu quyết định xác thực phần thưởng trên máy chủ của chính mình để cải thiện khả năng bảo mật bằng cách bổ sung bước xác thực vào máy chủ này. Vui lòng cung cấp điểm cuối của nhà phát hành cho đại diện Facebook của bạn để bật tính năng này.

Tổng quan

Nếu bạn quản lý phần thưởng cho người dùng ở phía máy chủ, Facebook sẽ cung cấp giải pháp thực hiện điều này một cách bảo mật bằng cách sử dụng kỹ thuật xác thực. Máy chủ của chúng tôi sẽ giao tiếp với điểm cuối https đã chỉ định để xác thực từng lượt hiển thị quảng cáo và xác thực liệu có trao phần thưởng hay không.

  1. Audience Network SDK yêu cầu quảng cáo video kèm phần thưởng phải có các thông số sau đây:
    • placementId: ID vị trí quảng cáo trên Audience Network
    • RewardData – Đối tượng RewardData bao gồm UserId đại diện cho ID người dùng và Currency đại diện cho phần thưởng thực tế trong game.
  2. Sau khi người dùng xem hết video, Máy chủ Facebook sẽ chuyển tiếp các giá trị này tới điểm cuối đã chỉ định, cùng với Khóa bí mật của ứng dụng và ID giao dịch duy nhất.
  3. Sau khi nhận, máy chủ sẽ xác thực yêu cầu và phản hồi như sau:
    • 200 response: yêu cầu hợp lệ và phần thưởng sẽ được trao
    • Non 200 response: yêu cầu không hợp lệ và phần thưởng sẽ không được trao.
  4. Sau khi video phát xong, thẻ kết thúc sẽ hiển thị và một trong những sự kiện sau sẽ được kích hoạt.
    • RewardedVideoAdDidSucceed – chỉ được kích hoạt nếu nhận được phản hồi 200 trong bước 3.
    • RewardedVideoAdDidFail – được kích hoạt nếu nhận được phản hồi không phải là 200 trong bước 3.

Ví dụ về URL sẽ được gửi từ máy chủ của Facebook đến điểm cuối của nhà phát hành: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

Quy trình sẽ có dạng như sau:

Triển khai

Sau khi khởi tạo đối tượng video kèm phần thưởng, bạn cần chuyển ID người dùng và Giá trị phần thưởng vào dữ liệu quảng cáo kèm phần thưởng trước khi tải quảng cáo. Bạn có thể thực hiện điều này bằng lớp RewardData. Cả ID người dùng và Giá trị phần thưởng đều ở dạng chuỗi. Ví dụ:

public class RewardedVideoAdTest : MonoBehaviour
{
  ...
  private bool isLoaded;
  private RewardedVideoAd rewardedVideoAd;

  public void LoadRewardedVideo()

    //Set the rewarded ad data
    RewardData rewardData = new RewardData();
    rewardData.UserId = "USER_ID";
    rewardData.Currency = "REWARD_ID";

    // Instantiate RewardedVideoAd with reward data
    this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID", rewardData);
    this.rewardedVideoAd.Register(this.gameObject);

    // Set delegates to get notified on changes or when the user interacts with the ad.
    this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
        Debug.Log("RewardedVideo ad loaded.");
        this.isLoaded = true;
    });
    this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
        Debug.Log("RewardedVideo ad failed to load with error: " + error);
    });
    this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
        Debug.Log("RewardedVideo ad logged impression.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
        Debug.Log("RewardedVideo ad clicked.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
        Debug.Log("Rewarded video ad did close.");
        if (this.rewardedVideoAd != null) {
            this.rewardedVideoAd.Dispose();
        }
    });

    // For S2S validation you need to register the following two callback
    this.rewardedVideoAd.RewardedVideoAdDidSucceed = (delegate() {
        Debug.Log("Rewarded video ad validated by server");
    });
    this.rewardedVideoAd.RewardedVideoAdDidFail = (delegate() {
        Debug.Log("Rewarded video ad not validated, or no response from server");
    });       

    this.rewardedVideoAd.loadAd();
  }
  ...
}

Để ứng dụng của bạn nhận được thông báo về việc phần thưởng đã được xác thực hay chưa, bạn sẽ cần triển khai các lệnh gọi lại RewardedVideoAdDidSucceedRewardedVideoAdDidFail, ngoài những lệnh gọi lại khác cho RewardedVideoAd.

Sau khi quảng cáo được tải, bạn có thể hiển thị quảng cáo này bằng phương thức Show giống như RewardedVideoAd bình thường.

Lưu ý rằng lệnh gọi lại xác thực máy chủ có thể diễn ra sau khi người dùng loại bỏ thẻ kết thúc. Bạn không nên giải phóng đối tượng video kèm phần thưởng cho đến khi một trong các hàm gọi lại này xuất hiện.

Các bước tiếp theo

Làm theo hướng dẫn của chúng tôi để tích hợp các Định dạng quảng cáo khác nhau trong ứng dụng Unity:

Khi bạn đã sẵn sàng đăng ứng dụng và kiếm tiền, hãy gửi ứng dụng đi xét duyệt sau khi đảm bảo rằng ứng dụng tuân thủ chính sách về Audience Networktiêu chuẩn cộng đồng của Facebook.