Khi trang chứa trò chơi của bạn tải lần đầu, sẽ có một số sự kiện không đồng bộ diễn ra.
Logic trò chơi của bạn tải, thẻ quảng cáo tải, Ad Placement API bắt đầu khởi chạy và quảng cáo có thể được tải trước. Do đó, nếu bạn gọi adBreak()
ngay sau khi tải trang, thì có thể API chưa được khởi tạo hoặc quảng cáo chưa hoàn tất quá trình tải trước. Nếu API chưa khởi chạy, lệnh gọi sẽ không thành công và nếu bạn đã đăng ký một lệnh gọi lại adBreakDone()
, thì breakStatus
sẽ được đặt thành notReady
.
Nếu cần đồng bộ hoá logic trò chơi với quá trình khởi chạy AdPlacement API, bạn có thể sử dụng lệnh gọi lại onReady()
để adConfig()
.
API Vị trí đặt quảng cáo sẽ gọi onReady()
khi:
- thẻ của quảng cáo đã tải,
- API Vị trí đặt quảng cáo đã tải và khởi chạy, đồng thời
- quảng cáo đã tải trước xong – nếu bạn yêu cầu tải trước bằng
adConfig()
Tại thời điểm này, API Vị trí đặt quảng cáo đã được khởi chạy hoàn toàn. Bạn có thể gọi adBreak()
và phương thức này sẽ không trả về trạng thái notReady
. Tuy nhiên, như thường lệ, adBreak()
vẫn có thể không hiển thị quảng cáo (ví dụ: không có quảng cáo nào).
Sau đây là một ví dụ minh hoạ cách sử dụng onReady()
:
...
<script>
window.adsbygoogle = window.adsbygoogle || [];
var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
...
function init() {
// Game start logic, show loading screen
adConfig({
preloadAdBreaks: 'on',
onReady: showAd
});
// Don't start the gameplay just yet, keep loading.
}
function showAd() {
// Show an ad
adBreak({
type: 'start',
adBreakDone: startGame, // always called, unblocks the game logic
...
});
}
...
</script>
Lưu ý: trường hợp sử dụng phổ biến nhất để gọi adBreak()
ngay sau khi tải trang là triển khai quảng cáo trước video. Bạn nên sử dụng loại vị trí preroll
thay vì cố gắng tự tạo bằng các phương thức được mô tả tại đây.
preroll
tự động triển khai tất cả logic tải trước và thời gian chờ bắt buộc. Nếu sử dụng quảng cáo trước video với trò chơi, bạn không cần dùng onReady()
. Tìm hiểu thêm về quảng cáo trước video
Số lần bị tạm ngừng
onReady()
không đảm bảo được gọi nếu quá trình khởi chạy Ad Placement API bị trì hoãn hoặc không tải được hoàn toàn. Để đảm bảo trò chơi của bạn bắt đầu đúng giờ, bạn có thể thiết lập thời gian chờ. Nếu nhận được lệnh gọi lại onReady()
, bạn có thể gọi adBreak() để đặt quảng cáo, nếu không, bạn có thể bỏ qua lệnh gọi quảng cáo và tiếp tục tải trò chơi.
Ví dụ sau đây bao gồm một thời gian chờ và tương tự như logic được triển khai bằng một vị trí quảng cáo trước video:
...
<script>
window.adsbygoogle = window.adsbygoogle || [];
var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
...
function init() {
// Game start logic
let adConfigPromise =
new Promise((resolve, reject) => adConfig({
preloadAdBreaks: 'on',
onReady: () => resolve(true)
}));
let timeoutPromise =
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(false);
}, 2000);
});
// Whatever happens first resolves this promise.
Promise.race([
adConfigPromise,
timeoutPromise
]).then((shouldShowPreRoll) => {
if (shouldShowPreRoll) {
showPreRoll();
} else {
startGame();
}
});
}
function showPreRoll() {
// Show ad
adBreak({
type: 'start',
adBreakDone: startGame, // always called, unblocks the game logic
...
});
}
...
</script>