Integrare reclame in-game
Ultima actualizare: 2026-08-11
Integrați reclame Banner, interstitial și rewarded prin puntea gazdă PlayNova. Jocul rulează într-un iframe și comunică cu gazda via postMessage — nu încorporați SDK-uri publicitare terțe în pachet.
Cum funcționează monetizarea
PlayNova umple reclamele pe partea gazdă și împarte veniturile cu creatorii certificați (implicit 70% creator). Jocurile cer doar show/load; gazda gestionează inventarul, limitele de frecvență și raportarea impression/click.
Plic pentru fiecare mesaj:
{ "source": "...", "type": "...", "payload": { } }- Jocurile trebuie să seteze
sourcelaplaynova-game - Gazda răspunde cu
sourceplaynova-host
Formate reclamă:
- Rewarded — opt-in jucător (revive, recompensă dublă, obiect gratuit). Acordați recompense doar după
ads.rewarded_completed. - Interstitial — pauze naturale (nivel complet / game over). Niciodată în timpul inputului.
- Banner — bandă deținută de gazdă; jocul cere doar show/hide.
Plasamente recomandate
Transmiteți mereu un șir placement stabil pentru analize și limite. Preferați numele platformei de mai jos:
| Placement | Caz de utilizare |
|---|---|
revive | Continuare după eșec |
double_reward | Bonus la final de nivel |
free_item / unlock | Consumabil sau deblocare conținut |
level_complete / level_start / game_over / pause | Momente interstitial |
banner_bottom / banner_top | Sloturi Banner |
Flux integrare
- La o pauză naturală, apelați
ads.load_*cuplacement(șirequestIdopțional). - Așteptați
ads.*_loaded(sau tratați*_failedși continuați fără reclame). - Apelați
ads.show_*cu acelașirequestId/placement. - Pentru rewarded, modificați starea jocului doar la
ads.rewarded_completed. dismissed/failed — nu acordați recompensa.
Tipuri mesaje bridge
Șirurile type canonice sunt definite în playnova-web (ads-bridge). Aliniați pachetul jocului la aceste valori exacte.
Joc → gazdă
| type | Scop |
|---|---|
ads.load_rewarded | Preîncărcare inventar rewarded |
ads.show_rewarded | Afișare rewarded (acordare doar după finalizare) |
ads.load_interstitial | Preîncărcare interstitial |
ads.show_interstitial | Afișare interstitial la pauză |
ads.show_banner | Cerere Banner gazdă vizibil |
ads.hide_banner | Ascundere Banner gazdă |
ads.preload | Preîncărcare formate multiple |
ads.get_banner_height | Interogare înălțime Banner pentru layout |
Gazdă → joc
| type | Scop |
|---|---|
ads.rewarded_loaded | Rewarded gata de afișare |
ads.rewarded_failed | Rewarded load/show eșuat |
ads.rewarded_completed | Rewarded finalizat — sigur de acordat |
ads.rewarded_dismissed | Rewarded închis devreme — nu acordați |
ads.interstitial_loaded | Interstitial gata |
ads.interstitial_failed | Interstitial eșuat |
ads.interstitial_closed | Interstitial închis |
ads.banner_shown | Banner vizibil |
ads.banner_hidden | Banner ascuns |
ads.banner_failed | Banner eșuat |
Helper copiere-lipire
Lipiți în index.html (sau modul). Înlocuiți acordarea recompensei cu logica jocului.
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);
});
}
// Exemplu: flux 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') {
// acordați recompensa DOAR aici
}
});Reguli producție
- Fără auto-click, bucle forțate sau ascundere Close / Skip.
- Nu acordați recompense fără
ads.rewarded_completedpentru acelrequestId. - Respectați eșecurile gazdei: inventar gol, continuați jocul elegant.
- Preferați load înainte de show pentru mai puțină așteptare.
- Pachete fără SDK-uri publicitare terțe, trackere sau scripturi pop-under.
- Frecvența interstitial este impusă de gazdă; spam show poate fi ignorat.
Întrebări frecvente
Pot folosi AdMob / Unity Ads în zip?
Nu. PlayNova agregă cererea pe gazdă. Încorporarea altor SDK-uri eșuează review-ul și încalcă presupunerile sandbox iframe.
Ce dacă gazda nu răspunde?
Tratați tăcerea sau *_failed ca no-fill. Continuați jocul fără a bloca jucătorul cu spinner infinit.
Unde văd veniturile?
După reclame live în producție, impression și venituri merg la analize creator. Decontare conform termenilor programului.
Puntea gazdă este live pe pagina de joc. Tipurile de mesaje de mai sus sunt contractul de producție — implementați acum.
