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


Quảng cáo có tặng thưởng cho phép người dùng chọn tương tác với quảng cáo để đổi lấy phần thưởng trong ứng dụng. 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 vào các ứng dụng Android và iOS bằng cách sử dụng SDK quảng cáo trên thiết bị di động của Google bằng C++.

Hãy đọc một số 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

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

Khi bạn tạo và thử nghiệm ứng dụng, hãy nhớ sử dụng quảng cáo thử nghiệm thay vì quảng cáo đang chạy trong thực tế. Chúng tôi có thể tạm ngưng tài khoản của bạn nếu bạn không làm như vậy.

Cách dễ nhất để tải quảng cáo thử nghiệm là sử dụng mã đơn vị quảng cáo thử nghiệm dành riêng cho quảng cáo có tặng thưởng. Mã này sẽ khác nhau tuỳ theo nền tảng thiết bị:

  • Android: ca-app-pub-3940256099942544/5224354917
  • iOS: ca-app-pub-3940256099942544/1712485313

Các mã 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 các mã này trong ứng dụng của mình khi lập trình, chạy thử nghiệm và gỡ lỗi. Bạn chỉ cần nhớ thay thế mã này bằng mã đơn vị quảng cáo của 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.

Triển khai

Các bước chính để tích hợp quảng cáo có tặng thưởng là:

  1. Tải một quảng cáo.
  2. Đăng ký các lệnh gọi lại.
  3. Hiển thị quảng cáo và xử lý sự kiện phần thưởng.

Định cấu hình RewardedAd

Quảng cáo có tặng thưởng hiển thị trong các đối tượng RewardedAd, vì vậy, bước đầu tiên để tích hợp quảng cáo có tặng thưởng vào ứng dụng của bạn là tạo và khởi chạy một phiên bản của RewardedAd.

  1. Thêm tiêu đề sau vào mã C++ của ứng dụng:

     #include "firebase/gma/rewarded_ad.h"

  2. Khai báo và tạo thực thể cho một đối tượng RewardedAd:

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();

  3. Khởi động thực thể RewardedAd bằng cách sử dụng chế độ xem gốc được truyền đến một loại AdParent. Khung hiển thị gốc là một tham chiếu JNI jobject đến Activity Android hoặc một con trỏ đến UIView iOS.

    // my_ad_parent is a jobject reference to an Android Activity or
    // a pointer to an iOS UIView.
    firebase::gma::AdParent ad_parent =
      static_cast<firebase::gma::AdParent>(my_ad_parent);
    firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
    
  4. Ngoài việc giữ lại đối tượng tương lai dưới dạng một biến, bạn có thể định kỳ kiểm tra trạng thái của thao tác khởi tạo bằng cách gọi InitializeLastResult() trên đối tượng RewardedAd. Điều này có thể hữu ích cho việc theo dõi quy trình khởi động trong vòng lặp trò chơi chung.

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = rewarded_ad->InitializeLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      // Initialization completed.
      if(future.error() == firebase::gma::kAdErrorCodeNone) {
        // Initialization successful.
      } else {
        // An error has occurred.
      }
    } else {
      // Initialization on-going.
    }
    

Để biết thêm thông tin về cách làm việc với firebase::Future, hãy xem bài viết Sử dụng Futures để theo dõi trạng thái hoàn tất của các lệnh gọi phương thức.

Tải một quảng cáo

Bạn có thể tải một quảng cáo bằng cách sử dụng phương thức LoadAd() trên một đối tượng RewardedAd. Phương thức tải này yêu cầu bạn đã khởi tạo đối tượng RewardedAd, đồng thời có mã đơn vị quảng cáo và một đối tượng AdRequest. firebase::Future sẽ được trả về. Bạn có thể dùng firebase::Future này để theo dõi trạng thái và kết quả của thao tác tải.

Đoạn mã sau đây cho biết cách tải một quảng cáo sau khi RewardedAd được khởi chạy thành công:

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);

Đăng ký sử dụng lệnh gọi lại

Bạn phải mở rộng lớp FullScreenContentListener để nhận thông báo về các sự kiện trong vòng đời và sự kiện trình bày quảng cáo có tặng thưởng. Bạn có thể đăng ký lớp con FullScreenContentListener tuỳ chỉnh thông qua phương thức RewardedAd::SetFullScreenContentListener() và lớp con này sẽ nhận được các lệnh gọi lại khi quảng cáo hiển thị thành công hoặc không thành công, cũng như khi quảng cáo bị loại bỏ.

Đoạn mã sau đây cho biết cách mở rộng lớp và chỉ định lớp đó cho quảng cáo:

  class ExampleFullScreenContentListener
      : public firebase::gma::FullScreenContentListener {

   public:
    ExampleFullScreenContentListener() {}

    void OnAdClicked() override {
      // This method is invoked when the user clicks the ad.
    }

    void OnAdDismissedFullScreenContent() override {
     // This method is invoked when the ad dismisses full screen content.
    }

    void OnAdFailedToShowFullScreenContent(const AdError& error) override {
      // This method is invoked when the ad failed to show full screen content.
      // Details about the error are contained within the AdError parameter.
    }

    void OnAdImpression() override {
      // This method is invoked when an impression is recorded for an ad.
    }

    void OnAdShowedFullScreenContent() override {
      // This method is invoked when the ad showed its full screen content.
    }
  };

  ExampleFullScreenContentListener* example_full_screen_content_listener =
    new ExampleFullScreenContentListener();
  rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);

RewardedAd là đối tượng dùng một lần. Điều này có nghĩa là khi một quảng cáo có tặng thưởng xuất hiện, thì quảng cáo đó sẽ không thể hiển thị lại. Phương pháp hay nhất là tải một quảng cáo có tặng thưởng khác trong phương thức OnAdDismissedFullScreenContent() của FullScreenContentListener để 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.

Hiển thị quảng cáo và xử lý sự kiện tặng thưởng

Trước khi hiển thị quảng cáo có tặng thưởng cho người dùng, bạn phải cho người dùng thấy 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.

Khi hiển thị quảng cáo, bạn phải cung cấp một đối tượng UserEarnedReward để xử lý phần thưởng cho người dùng.

Mã sau đây minh hoạ cách hiển thị một RewardedAd:

// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
    public firebase::gma::UserEarnedRewardListener {
 public:
   ExampleUserEarnedRewardListener() { }

  void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
    // Reward the user!
  }
};

ExampleUserEarnedRewardListener* user_earned_reward_listener =
  new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);

Câu hỏi thường gặp

Lệnh gọi khởi động có thời gian chờ không?
Sau 10 giây, SDK Quảng cáo của Google trên thiết bị di động bằng C++ sẽ hoàn tất firebase::Future do Initialize() trả về, ngay cả khi mạng dàn xếp vẫn chưa hoàn tất quy trình khởi chạy.
Điều gì xảy ra nếu một số mạng dàn xếp chưa sẵn sàng hoạt động khi tôi nhận được lệnh gọi lại dùng để khởi động?

Phương pháp hay nhất là tải quảng cáo sau khi quá trình khởi chạy SDK hoàn tất. Ngay cả khi mạng dàn xếp chưa sẵn sàng, SDK quảng cáo trên thiết bị di động của Google bằng C++ vẫn sẽ yêu cầu mạng đó cung cấp một quảng cáo. Vì vậy, nếu một mạng dàn xếp kết thúc quá trình khởi chạy sau khi hết thời gian chờ, thì mạng đó vẫn có thể thực hiện các yêu cầu quảng cáo tiếp theo trong phiên đó.

Bạn có thể tiếp tục kiểm tra trạng thái khởi động của tất cả các bộ chuyển đổi trong toàn bộ phiên ứng dụng bằng cách gọi GetInitializationStatus().

Làm cách nào để biết lý do khiến một mạng dàn xếp cụ thể chưa sẵn sàng hoạt động?

AdapterStatus.description() cho biết lý do khiến một bộ chuyển đổi chưa sẵn sàng phân phát các yêu cầu quảng cáo. Hãy xem mã nguồn của ứng dụng khởi động nhanh mẫu trong GitHub để biết ví dụ về cách ghi nhật ký trạng thái bộ chuyển đổi dàn xếp.

Tài nguyên khác

Ví dụ trong GitHub