Skip to content

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:

json
{ "source": "...", "type": "...", "payload": { } }
  • Game phải đặt source thành playnova-game
  • Host trả lời với source playnova-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:

PlacementTrường hợp
reviveTiếp tục sau thất bại
double_rewardThưởng cuối màn
free_item / unlockVật phẩm tiêu hao hoặc mở khóa nội dung
level_complete / level_start / game_over / pauseThời điểm interstitial
banner_bottom / banner_topVị trí Banner

Luồng tích hợp ​

  1. Ở khoảng nghỉ tự nhiên, gọi ads.load_* với placement (và requestId tùy chọn).
  2. Chờ ads.*_loaded (hoặc xử lý *_failed và tiếp tục không quảng cáo).
  3. Gọi ads.show_* với cùng requestId / placement.
  4. 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 ​

typeMục đích
ads.load_rewardedTải trước inventory rewarded
ads.show_rewardedHiển thị rewarded (chỉ trao sau khi hoàn thành)
ads.load_interstitialTải trước interstitial
ads.show_interstitialHiển thị interstitial khi nghỉ
ads.show_bannerYêu cầu Banner host hiển thị
ads.hide_bannerẨn Banner host
ads.preloadTải trước nhiều định dạng
ads.get_banner_heightTruy vấn chiều cao Banner cho layout

Host → game ​

typeMục đích
ads.rewarded_loadedRewarded sẵn sàng hiển thị
ads.rewarded_failedRewarded load/show thất bại
ads.rewarded_completedRewarded hoàn thành — an toàn để trao
ads.rewarded_dismissedRewarded đóng sớm — không trao
ads.interstitial_loadedInterstitial sẵn sàng
ads.interstitial_failedInterstitial thất bại
ads.interstitial_closedInterstitial đã đóng
ads.banner_shownBanner hiển thị
ads.banner_hiddenBanner ẩn
ads.banner_failedBanner 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.

js
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_completed cho requestId đó.
  • 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.

Tài liệu PlayNova cho nhà sáng tạo