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ó thể chọn tương tác với để đổ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 Android. 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.

Nếu bạn muốn tìm hiểu cách hoạt động của quảng cáo có tặng thưởng, hãy xem bản minh họa bên dưới. Phần này cho thấy quy trình tích hợp quảng cáo video có tặng thưởng vào một trò chơi đơn giản.

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

  • SDK quảng cáo trên thiết bị di động của Google phiên bản 17.2.0 trở lên.
  • Thực hiện theo Hướng dẫn bắt đầu sử dụng để nhập SDK quảng cáo trên thiết bị di động của Google và cập nhật tệp kê khai Android của bạn.

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ị. Bước đầu tiên là tạo bản sao cho RewardedAd. Bạn có thể thực hiện việc này trong phương thức onCreate() của Activity trong đoạn mã sau đây:

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "ca-app-pub-3940256099942544/5224354917");
    }

}

Kotlin

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : Activity() {

  private lateinit var rewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    ...
    rewardedAd = RewardedAd(this,
        "ca-app-pub-3940256099942544/5224354917")
  }
}

Hàm dựng yêu cầu các đối số sau:

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 mã đơn vị quảng cáo thử nghiệm dành riêng cho video có tặng thưởng trên Android:

ca-app-pub-3940256099942544/5224354917

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 mã này trong ứng dụng của mình khi viết mã, 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 về 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 AdRequestRewardedAdLoadCallback làm đối số.

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "ca-app-pub-3940256099942544/5224354917");

        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

           @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
    }
}

Kotlin

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : Activity() {

  private val rewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
    val adLoadCallback = object: RewardedAdLoadCallback() {
      fun onRewardedAdLoaded() {
        // Ad successfully loaded.
      }
      fun onRewardedAdFailedToLoad(adError: LoadAdError) {
        // Ad failed to load.
      }
    }
    rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
  }
}

Phương thức onRewardedAdLoaded()onRewardedAdFailedToLoad() của RewardedAdLoadCallback cung cấp kết quả của hoạt động tải quảng cáo.

Các phương thức có thể ghi đè
onRewardedAdLoaded() Phương thức này được thực thi khi quảng cáo tải xong.
onRewardedAdFailedToLoad() Phương thức này được gọi khi quảng cáo không tải được. Phương thức này bao gồm loại thông số lỗi LoadAdError cho biết loại lỗi đã xảy ra. Để biết thêm thông tin, hãy tham khảo tài liệu Gỡ lỗi tải quảng cáo.

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. Trong mọi trường hợp, người dùng phải có thể chọn xem hoặc không xem quảng cáo có tặng thưởng.

Để hiển thị RewardedAd, 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(). Phương thức show() yêu cầu bản sao của ActivityRewardedAdCallback làm đối số. Bản sao Activity phải là hoạt động mà từ đó quảng cáo có tặng thưởng được hiển thị.

Quảng cáo có tặng thưởng trong ví dụ về mã ở trên có thể hiển thị trong OnClickListener của nút như sau:

Java

myButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (rewardedAd.isLoaded()) {
            Activity activityContext = MainActivity.this
            RewardedAdCallback adCallback = new RewardedAdCallback() {
                @Override
                public void onRewardedAdOpened() {
                    // Ad opened.
                }

                @Override
                public void onRewardedAdClosed() {
                    // Ad closed.
                }

                @Override
                public void onUserEarnedReward(@NonNull RewardItem reward) {
                    // User earned reward.
                }

                @Override
                public void onRewardedAdFailedToShow(AdError adError) {
                    // Ad failed to display.
                }
            };
            rewardedAd.show(activityContext, adCallback);
        } else {
            Log.d("TAG", "The rewarded ad wasn't loaded yet.");
        }
    }
});

Kotlin

myButton.setOnClickListener {
  if (rewardedAd.isLoaded) {
    val activityContext: Activity = this@MainActivity
    val adCallback = object: RewardedAdCallback() {
      override fun onRewardedAdOpened() {
        // Ad opened.
      }
      override fun onRewardedAdClosed() {
        // Ad closed.
      }
      override fun onUserEarnedReward(@NonNull reward: RewardItem) {
        // User earned reward.
      }
      override fun onRewardedAdFailedToShow(adError: AdError) {
        // Ad failed to display.
      }
    }
    rewardedAd.show(activityContext, adCallback)
  }
  else {
    Log.d("TAG", "The rewarded ad wasn't loaded yet.")
  }
}

Nhận thông báo về sự kiện quảng cáo

RewardedAdCallback đã cung cấp cho phương thức show() sẽ nhận được thông báo về các sự kiện quảng cáo có tặng thưởng. Mỗi phương thức có thể ghi đè trong RewardedAdCallback tương ứng với một sự kiện trong thời gian hoạt động của quảng cáo có tặng thưởng. Ví dụ: phương thức onUserEarnedReward() là vị trí hoàn hảo để cung cấp cho người dùng phần thưởng của họ. Dưới đây là thông tin bổ sung về mỗi phương thức của sự kiện quảng cáo.

Các phương thức có thể ghi đè
onRewardedAdOpened() 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ị.
onRewardedAdClosed() 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 sử dụng nút quay lại để đóng quảng cáo có tặng thưởng. Nếu ứng dụng của bạn 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.
onUserEarnedReward() Phương thức này được gọi khi người dùng được tặng thưởng vì đã tương tác với quảng cáo. Bạn có thể truy cập thông tin chi tiết về phần thưởng được định cấu hình cho đơn vị quảng cáo của mình thông qua các phương thức getType()getAmount() của thông số RewardItem.
onRewardedAdFailedToShow() Phương thức này được gọi khi quảng cáo không hiển thị. Phương thức này bao gồm một thông số adError cho biết loại lỗi đã xảy ra. Các giá trị có thể có của mã lỗi (adError.getCode()) được định nghĩa dưới dạng hằng số trong lớp RewardedAdCallback.

Sử dụng RewardedAdCallback để 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ị, bạn không thể sử dụng đối tượng này để 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.

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 onRewardedAdClosed() trên RewardedAdCallback để 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ị loại bỏ:

Java

public RewardedAd createAndLoadRewardedAd() {
        RewardedAd rewardedAd = new RewardedAd(this,
                "ca-app-pub-3940256099942544/5224354917");
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
}

@Override
public void onRewardedAdClosed() {
    this.rewardedAd = createAndLoadRewardedAd();
}

Kotlin

fun createAndLoadRewardedAd(): RewardedAd {
  val rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
  val adLoadCallback = object: RewardedAdLoadCallback() {
    override fun onRewardedAdLoaded() {
      // Ad successfully loaded.
    }
    override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
      // Ad failed to load.
    }
  }
  rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
  return rewardedAd
}
fun onRewardedAdClosed() {
  this.rewardedAd = 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 2 quảng cáo có tặng thưởng cho 2 vị trí quảng cáo riêng biệt.

Java

package ...

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        gameOverRewardedAd = createAndLoadRewardedAd(
          "ca-app-pub-3940256099942544/5224354917");
        extraCoinsRewardedAd = createAndLoadRewardedAd(
          "ca-app-pub-3940256099942544/5224354917");
    }

    public RewardedAd createAndLoadRewardedAd(String adUnitId) {
        RewardedAd rewardedAd = new RewardedAd(this, adUnitId);
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
    }
}

Kotlin

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity: Activity() {

  private val gameOverRewardedAd:RewardedAd
  private val extraCoinsRewardedAd:RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    ...
    gameOverRewardedAd = createAndLoadRewardedAd(
      "ca-app-pub-3940256099942544/5224354917")
    extraCoinsRewardedAd = createAndLoadRewardedAd(
      "ca-app-pub-3940256099942544/5224354917")
  }

  fun createAndLoadRewardedAd(adUnitId:String): RewardedAd {
    val rewardedAd = RewardedAd(this, adUnitId)
    val adLoadCallback = object: RewardedAdLoadCallback() {
      override fun onRewardedAdLoaded() {
        // Ad successfully loaded.
      }
      override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
        // Ad failed to load.
      }
    }
    rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
    return rewardedAd
  }
}

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

Tôi có thể nhận thông tin chi tiết về phần thưởng cho RewardedAd không?
Có, nếu bạn cần số tiền thưởng trước khi kích hoạt lệnh gọi lại onUserEarnedReward(), RewardedAd có phương thức getRewardItem() mà bạn có thể kiểm tra để xác minh số tiền thưởng sau khi quảng cáo đã tải.
Lệnh gọi khởi chạy có thời gian chờ không?
Sau 10 giây, SDK quảng cáo trên thiết bị di động của Google sẽ gọi OnInitializationCompleteListener ngay cả khi mạng dàn xếp chưa hoàn thành 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 khởi chạy?

Đó là phương pháp hay nhất để tải quảng cáo bên trong lệnh gọi lại của OnInitializationCompleteListener. 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 vẫn sẽ yêu cầu mạng đó cung cấp quảng cáo. Vì vậy, nếu mạng dàn xếp khởi chạy xong sau khi hết thời gian chờ, mạng quảng cáo đó vẫn có thể thực hiện các yêu cầu quảng cáo tiếp theo trong phiên hoạt động đó.

Bạn có thể tiếp tục kiểm tra vòng trạng thái khởi chạy của tất cả các bộ chuyển đổi trong suốt phiên hoạt động trong ứng dụng của mình bằng cách gọi MobileAds.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.getDescription() cho biết lý do tại sao bộ chuyển đổi chưa sẵn sàng phục vụ các yêu cầu quảng cáo.

Các bước tiếp theo