Skip to content

Intégration publicitaire in-game ​

Dernière mise à jour : 2026-08-11

Intégrez les formats Banner, interstitiel et rewarded via le bridge hôte PlayNova. Votre jeu s'exécute dans un iframe et communique avec l'hôte via postMessage — n'intégrez pas de SDK publicitaires tiers dans le package.

Comment fonctionne la monétisation ​

PlayNova remplit les annonces côté hôte et partage les revenus avec les créateurs certifiés (70 % créateur par défaut). Les jeux ne demandent que show/load ; l'hôte gère l'inventaire, les plafonds de fréquence et le reporting impressions/clics.

Enveloppe pour chaque message :

json
{ "source": "...", "type": "...", "payload": { } }
  • Les jeux doivent définir source à playnova-game
  • L'hôte répond avec source playnova-host

Formats publicitaires :

  • Rewarded — opt-in joueur (revive, double récompense, objet gratuit). Accorder les récompenses uniquement après ads.rewarded_completed.
  • Interstitiel — pauses naturelles (niveau terminé / game over). Jamais en pleine saisie.
  • Banner — bandeau géré par l'hôte ; le jeu ne demande que show/hide.

Emplacements recommandés ​

Passez toujours une chaîne placement stable pour analyses et plafonds. Préférez les noms plateforme ci-dessous :

PlacementCas d'usage
reviveContinuer après échec
double_rewardBonus fin de niveau
free_item / unlockConsommable ou déblocage de contenu
level_complete / level_start / game_over / pauseMoments interstitiels
banner_bottom / banner_topEmplacements Banner

Flux d'intégration ​

  1. À une pause naturelle, appelez ads.load_* avec placement (et requestId optionnel).
  2. Attendez ads.*_loaded (ou gérez *_failed et continuez sans pub).
  3. Appelez ads.show_* avec le même requestId / placement.
  4. Pour rewarded, modifiez l'état du jeu uniquement sur ads.rewarded_completed. Sur dismissed/failed, n'accordez pas la récompense.

Types de messages bridge ​

Les chaînes type canoniques sont définies dans playnova-web (ads-bridge). Alignez votre package jeu sur ces valeurs exactes.

Jeu → hôte ​

typeObjectif
ads.load_rewardedPrécharger l'inventaire rewarded
ads.show_rewardedAfficher rewarded (accorder uniquement après completion)
ads.load_interstitialPrécharger interstitiel
ads.show_interstitialAfficher interstitiel à une pause
ads.show_bannerDemander la visibilité du Banner hôte
ads.hide_bannerMasquer le Banner hôte
ads.preloadPrécharger plusieurs formats
ads.get_banner_heightInterroger la hauteur Banner pour la mise en page

Hôte → jeu ​

typeObjectif
ads.rewarded_loadedRewarded prêt à afficher
ads.rewarded_failedÉchec load/show rewarded
ads.rewarded_completedRewarded terminé — attribution sûre
ads.rewarded_dismissedRewarded fermé tôt — ne pas accorder
ads.interstitial_loadedInterstitiel prêt
ads.interstitial_failedÉchec interstitiel
ads.interstitial_closedInterstitiel fermé
ads.banner_shownBanner visible
ads.banner_hiddenBanner masqué
ads.banner_failedÉchec Banner

Helper copier-coller ​

Collez dans votre index.html (ou module). Remplacez l'attribution de récompense par votre logique de jeu.

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);
  });
}
// Exemple : 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') {
    // accorder la récompense UNIQUEMENT ici
  }
});

Règles de production ​

  • Pas de clic auto, boucle forcée ou masquage des contrôles Close / Skip.
  • N'accordez pas de récompense sans ads.rewarded_completed pour ce requestId.
  • Respectez les échecs hôte : inventaire vide, continuez le jeu normalement.
  • Préférez load avant show pour réduire l'attente au déclenchement.
  • Packages sans SDK pub tiers, trackers ou scripts pop-under.
  • La fréquence interstitielle est imposée par l'hôte ; le spam show peut être ignoré.

FAQ ​

Puis-je utiliser AdMob / Unity Ads dans le zip ? ​

Non. PlayNova agrège la demande côté hôte. Intégrer d'autres SDK échoue la review et casse les hypothèses sandbox iframe.

Et si l'hôte ne répond pas ? ​

Traitez le silence ou *_failed comme no-fill. Continuez le gameplay sans bloquer le joueur sur un spinner infini.

Où voir les revenus ? ​

Après mise en prod, impressions et revenus arrivent dans analytics créateur. Règlement selon les conditions du programme créateur.


Le bridge hôte est live sur la page de jeu. Les types de messages ci-dessus sont le contrat production — implémentez-les maintenant.

Documentation créateur PlayNova