Quảng cáo có tặng thưởng cho phép người dùng tương tác với quảng cáo để đổi lấy sự khác biệt để nhận 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 sử dụng SDK C++ cho quảng cáo trên thiết bị di động của Google.
Đọ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
- Hoàn thành các bước Bắt đầu.
- (Chỉ dành cho Android) Nắm rõ cách làm việc với các tệp tham chiếu
jobject
JNI (xem Mẹo về JNI Android).
Luôn thử nghiệm bằng quảng cáo thử nghiệm
Khi 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 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 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 mã này trong ứng dụng của mình khi lập trình, 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 riêng mình trước khi xuất bản .
Để 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 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à:
- Tải một quảng cáo.
- Đăng ký các lệnh gọi lại.
- Hiển thị quảng cáo và xử lý sự kiện tặng thưởng.
Định cấu hình một 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 để sử dụng
việc tích hợp quảng cáo có tặng thưởng vào ứng dụng là tạo và khởi chạy một phiên bản
trong tổng số RewardedAd
.
Hãy thêm tiêu đề sau đây vào mã C++ của ứng dụng:
#include "firebase/gma/rewarded_ad.h"
Khai báo và tạo thực thể cho đối tượng
RewardedAd
:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
Khởi động thực thể
RewardedAd
bằng cách truyền khung hiển thị gốc tới một LoạiAdParent
. Khung hiển thị mẹ là một tham chiếu JNIjobject
đến một AndroidActivity
hoặc con trỏ đếnUIView
của 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);
Thay vì giữ lại 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 chạy bằng cách gọi
InitializeLastResult()
trên đối tượngRewardedAd
. Thông tin này có thể hữu ích để theo dõi quá trình khởi chạy trong vòng lặp trò chơi chung của bạn.// 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 hợp tác với firebase::Future
, hãy xem
Sử dụng Futures (tương lai) để theo dõi trạng thái hoàn thành của phương thức
cuộc gọi.
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 RewardedAd
. Phương thức tải này yêu cầu bạn phải khởi chạy RewardedAd
và bạn có mã đơn vị quảng cáo và một đối tượng AdRequest
. Đáp
firebase::Future
được trả về mà bạn có thể dùng để theo dõi trạng thái và kết quả
của thao tác tải.
Mã sau đây cho biết cách tải 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ý các lệnh gọi lại
Bạn phải mở rộng lớp FullScreenContentListener
để nhận
các thông báo về bản trình bày quảng cáo có tặng thưởng và các sự kiện trong vòng đời. Tùy chỉnh của bạn
Bạn có thể đăng ký lớp con FullScreenContentListener
thông qua lớp
RewardedAd::SetFullScreenContentListener()
và phương thức 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
chuông bá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à sau khi một quảng cáo có tặng thưởng
nên 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
vì quy tắc trước bị bỏ qua.
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 trình bày cho người dùng 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. Quảng cáo có tặng thưởng quảng cáo phải luôn là trải nghiệm chọn tham gia.
Khi hiển thị quảng cáo, bạn phải cung cấp đối tượng UserEarnedReward
để xử lý
phần thưởng cho người dùng.
Đoạn mã sau đây cho biết cách hiển thị 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 chạy có thời gian chờ không?
- Sau 10 giây, SDK C++ của quảng cáo trên thiết bị di động của Google sẽ hoàn tất
Initialize()
được trả vềfirebase::Future
ngay cả khi mạng dàn xếp vẫn chưa hoàn thành quá trình khởi chạy. - Điều gì sẽ xảy ra nếu một số mạng dàn xếp chưa sẵn sà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 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 hoạt động, SDK C++ của quảng cáo trên thiết bị di động của Google sẽ vẫn yêu cầu mạng đó cho một quảng cáo. Vì vậy, nếu một mạng dàn xếp kết thúc khởi chạy sau khi hết thời gian chờ, nhưng URL đó vẫn có thể thực hiện các yêu cầu quảng cáo trong tương lai ở phiên hoạt động.
Bạn có thể tiếp tục thăm dò trạng thái khởi chạy của tất cả các bộ chuyển đổi trong toàn bộ phiên hoạt động trong ứng dụng của bạn bằng cách gọi
GetInitializationStatus()
.- Làm cách nào để biết lý do một mạng dàn xếp cụ thể chưa sẵn sàng?
AdapterStatus.description()
cho biết lý do khiến một bộ chuyển đổi chưa sẵn sàng bảo dưỡng yêu cầu quảng cáo. Xem mã nguồn của ví dụ về ứng dụng bắt đầu nhanh trong GitHub để xem ví dụ về cách ghi nhật ký trạng thái của bộ chuyển đổi dàn xếp.
Tài nguyên khác
Ví dụ trong GitHub
- Xem mã nguồn trong ví dụ của chúng tôi khởi động nhanh ứng dụng trong GitHub.