Khi trang chứa trò chơi của bạn tải lần đầu tiên, có một số sự kiện không đồng bộ diễn ra.
Logic trò chơi tải, thẻ quảng cáo tải, API Vị trí đặt quảng cáo 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, có thể API chưa khởi chạy hoặc quảng cáo chưa hoàn tất việc tải trước. Nếu API chưa khởi chạy cuộc gọi sẽ không thành công và nếu bạn đã đăng ký lệnh gọi lại adBreakDone()
, breakStatus
sẽ được đặt thành notReady
.
Nếu cần đồng bộ hoá logic trò chơi với việc khởi chạy API
Vị trí đặt quảng cáo, bạn có thể sử dụng lệnh gọi lại onReady()
đến adConfig()
.
onReady()
được gọi bởi API Vị trí đặt quảng cáo khi:
- thẻ quảng cáo đã được tải,
- API Vị trí đặt quảng cáo đã tải và khởi chạy, và
- quảng cáo đã tải trước – 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à thao tác này sẽ không trả về trạng thái notReady
. Nhưng 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).
Sau đây là ví dụ cho thấy việc 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 đầu video. Bạn nên dùng loại vị trí preroll
thay vì cố gắng tạo vị trí của riêng mình bằng các phương pháp mô tả ở đây.
preroll
tự động triển khai tất cả logic tải trước và hết 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 sử dụng onReady()
. Tìm hiểu thêm về trước video
Thời gian chờ
onReady()
không đảm bảo sẽ được gọi nếu quy trình khởi chạy API Vị trí đặt quảng cáo
bị trễ hoặc không tải được hoàn toàn. Để đảm bảo trò chơi bắt đầu kịp thời, bạn có thể muốn thiết lập thời gian chờ. Nếu nhận được
lệnh gọi lại onReady()
, thì 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 thời gian chờ – và tương tự như logic được triển khai bởi một vị trí 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>