Tích hợp quảng cáo in-game
Cập nhật lần cuối: 2026-08-11
Tích hợp quảng cáo Banner, interstitial và rewarded qua bridge host PlayNova. Game chạy trong iframe và giao tiếp với host bằng postMessage — không nhúng SDK quảng cáo bên thứ ba trong gói.
Cách kiếm tiền hoạt động
PlayNova phục vụ quảng cáo phía host và chia doanh thu với nhà sáng tạo được chứng nhận (mặc định 70% cho nhà sáng tạo). Game chỉ yêu cầu show/load; host quản lý inventory, giới hạn tần suất và báo cáo impression/click.
Phong bì cho mọi tin nhắn:
{ "source": "...", "type": "...", "payload": { } }- Game phải đặt
sourcethànhplaynova-game - Host trả lời với
sourceplaynova-host
Định dạng quảng cáo:
- Rewarded — người chơi opt-in (revive, phần thưởng gấp đôi, vật phẩm miễn phí). Chỉ trao thưởng sau
ads.rewarded_completed. - Interstitial — khoảng nghỉ tự nhiên (hoàn thành màn / game over). Không bao giờ giữa lúc nhập liệu.
- Banner — dải do host sở hữu; game chỉ yêu cầu show/hide.
Vị trí đề xuất
Luôn truyền chuỗi placement ổn định cho phân tích và giới hạn. Ưu tiên tên nền tảng bên dưới:
| Placement | Trường hợp |
|---|---|
revive | Tiếp tục sau thất bại |
double_reward | Thưởng cuối màn |
free_item / unlock | Vật phẩm tiêu hao hoặc mở khóa nội dung |
level_complete / level_start / game_over / pause | Thời điểm interstitial |
banner_bottom / banner_top | Vị trí Banner |
Luồng tích hợp
- Ở khoảng nghỉ tự nhiên, gọi
ads.load_*vớiplacement(vàrequestIdtùy chọn). - Chờ
ads.*_loaded(hoặc xử lý*_failedvà tiếp tục không quảng cáo). - Gọi
ads.show_*với cùngrequestId/placement. - Với rewarded, thay đổi trạng thái game chỉ tại
ads.rewarded_completed. dismissed/failed thì không trao thưởng.
Loại tin nhắn bridge
Chuỗi type chuẩn được định nghĩa trong playnova-web (ads-bridge). Căn gói game với các giá trị chính xác này.
Game → host
| type | Mục đích |
|---|---|
ads.load_rewarded | Tải trước inventory rewarded |
ads.show_rewarded | Hiển thị rewarded (chỉ trao sau khi hoàn thành) |
ads.load_interstitial | Tải trước interstitial |
ads.show_interstitial | Hiển thị interstitial khi nghỉ |
ads.show_banner | Yêu cầu Banner host hiển thị |
ads.hide_banner | Ẩn Banner host |
ads.preload | Tải trước nhiều định dạng |
ads.get_banner_height | Truy vấn chiều cao Banner cho layout |
Host → game
| type | Mục đích |
|---|---|
ads.rewarded_loaded | Rewarded sẵn sàng hiển thị |
ads.rewarded_failed | Rewarded load/show thất bại |
ads.rewarded_completed | Rewarded hoàn thành — an toàn để trao |
ads.rewarded_dismissed | Rewarded đóng sớm — không trao |
ads.interstitial_loaded | Interstitial sẵn sàng |
ads.interstitial_failed | Interstitial thất bại |
ads.interstitial_closed | Interstitial đã đóng |
ads.banner_shown | Banner hiển thị |
ads.banner_hidden | Banner ẩn |
ads.banner_failed | Banner thất bại |
Helper sao chép-dán
Dán vào index.html (hoặc module). Thay trao thưởng bằng logic game của bạn.
function pnAds(type, payload) {
parent.postMessage({ source: 'playnova-game', type, payload }, '*');
}
function onPnHost(handler) {
window.addEventListener('message', (e) => {
const d = e.data;
if (!d || d.source !== 'playnova-host') return;
handler(d);
});
}
// Ví dụ: luồng revive
pnAds('ads.load_rewarded', { placement: 'revive' });
onPnHost((msg) => {
if (msg.type === 'ads.rewarded_loaded') {
pnAds('ads.show_rewarded', {
requestId: msg.payload && msg.payload.requestId,
placement: 'revive',
reward: { type: 'life', amount: 1 },
});
}
if (msg.type === 'ads.rewarded_completed') {
// chỉ trao thưởng tại đây
}
});Quy tắc production
- Không tự click, vòng lặp ép buộc hoặc che nút Close / Skip.
- Không trao thưởng nếu chưa nhận
ads.rewarded_completedchorequestIdđó. - Tôn trọng lỗi host: inventory trống thì tiếp tục game bình thường.
- Ưu tiên load trước show để người chơi ít chờ hơn.
- Gói không có SDK quảng cáo bên thứ ba, tracker hoặc script pop-under.
- Tần suất interstitial do host kiểm soát; spam show có thể bị bỏ qua.
FAQ
Có thể dùng AdMob / Unity Ads trong zip không?
Không. PlayNova tổng hợp demand phía host. Nhúng SDK khác sẽ không qua review và phá giả định sandbox iframe.
Nếu host không trả lời?
Coi im lặng hoặc *_failed là no-fill. Tiếp tục chơi không chặn người chơi bằng spinner vô hạn.
Xem doanh thu ở đâu?
Sau khi quảng cáo live trong production, impression và doanh thu vào phân tích nhà sáng tạo. Thanh toán theo điều khoản chương trình.
Host bridge đang live trên trang chơi. Các loại tin nhắn trên là hợp đồng production — triển khai ngay.
