Integrasi iklan in-game
Kemas kini terakhir: 2026-08-11
Integrasikan iklan Banner, interstitial dan rewarded melalui jambatan hos PlayNova. Permainan anda berjalan dalam iframe dan berkomunikasi dengan hos melalui postMessage — jangan benamkan SDK iklan pihak ketiga dalam pakej.
Cara monetisasi berfungsi
PlayNova mengisi iklan di sisi hos dan berkongsi hasil dengan pencipta bertauliah (lalai 70% pencipta). Permainan hanya minta show/load; hos urus inventori, had kekerapan dan pelaporan impression/klik.
Sampul untuk setiap mesej:
{ "source": "...", "type": "...", "payload": { } }- Permainan mesti tetapkan
sourcekepadaplaynova-game - Hos membalas dengan
sourceplaynova-host
Format iklan:
- Rewarded — opt-in pemain (revive, ganjaran berganda, item percuma). Beri ganjaran hanya selepas
ads.rewarded_completed. - Interstitial — rehat semula jadi (level selesai / game over). Jangan semasa input.
- Banner — jalur milik hos; permainan hanya minta show/hide.
Placement disyorkan
Sentiasa hantar string placement stabil untuk analitik dan had. Utamakan nama platform di bawah:
| Placement | Kes penggunaan |
|---|---|
revive | Teruskan selepas gagal |
double_reward | Bonus akhir level |
free_item / unlock | Consumable atau buka kunci kandungan |
level_complete / level_start / game_over / pause | Momen interstitial |
banner_bottom / banner_top | Slot Banner |
Aliran integrasi
- Pada rehat semula jadi, panggil
ads.load_*denganplacement(danrequestIdpilihan). - Tunggu
ads.*_loaded(atau tangani*_faileddan teruskan tanpa iklan). - Panggil
ads.show_*denganrequestId/placementyang sama. - Untuk rewarded, ubah status permainan hanya pada
ads.rewarded_completed. dismissed/failed jangan beri ganjaran.
Jenis mesej bridge
String type kanonik ditakrifkan dalam playnova-web (ads-bridge). Selaraskan pakej permainan dengan nilai tepat ini.
Permainan → hos
| type | Tujuan |
|---|---|
ads.load_rewarded | Preload inventori rewarded |
ads.show_rewarded | Tunjuk rewarded (beri hanya selepas selesai) |
ads.load_interstitial | Preload interstitial |
ads.show_interstitial | Tunjuk interstitial semasa rehat |
ads.show_banner | Minta Banner hos kelihatan |
ads.hide_banner | Sembunyikan Banner hos |
ads.preload | Preload pelbagai format |
ads.get_banner_height | Tanya ketinggian Banner untuk layout |
Hos → permainan
| type | Tujuan |
|---|---|
ads.rewarded_loaded | Rewarded sedia ditunjukkan |
ads.rewarded_failed | Rewarded load/show gagal |
ads.rewarded_completed | Rewarded selesai — selamat beri ganjaran |
ads.rewarded_dismissed | Rewarded ditutup awal — jangan beri |
ads.interstitial_loaded | Interstitial sedia |
ads.interstitial_failed | Interstitial gagal |
ads.interstitial_closed | Interstitial ditutup |
ads.banner_shown | Banner kelihatan |
ads.banner_hidden | Banner disembunyikan |
ads.banner_failed | Banner gagal |
Pembantu salin-tampal
Tampal ke index.html (atau modul). Gantikan pemberian ganjaran dengan logik permainan anda.
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);
});
}
// Contoh: aliran 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') {
// beri ganjaran HANYA di sini
}
});Peraturan production
- Tiada auto-klik, gelung paksa atau tutup kawalan Close / Skip.
- Jangan beri ganjaran tanpa
ads.rewarded_completeduntukrequestIditu. - Hormati kegagalan hos: inventori kosong, teruskan permainan dengan baik.
- Utamakan load sebelum show supaya pemain kurang menunggu.
- Pakej tanpa SDK iklan pihak ketiga, penjejak atau skrip pop-under.
- Kekerapan interstitial dikuatkuasakan hos; spam show boleh diabaikan.
Soalan lazim
Bolehkah saya guna AdMob / Unity Ads dalam zip?
Tidak. PlayNova mengagregat permintaan di hos. Benamkan SDK lain gagal semakan dan melanggar andaian sandbox iframe.
Bagaimana jika hos tidak menjawab?
Anggap senyap atau *_failed sebagai no-fill. Teruskan gameplay tanpa menyekat pemain dengan spinner tanpa henti.
Di mana lihat hasil?
Selepas iklan live di production, impression dan hasil masuk ke analitik pencipta. Penyelesaian mengikut terma program.
Jambatan hos live di halaman main. Jenis mesej di atas ialah kontrak production — laksanakan sekarang.
