Oyun içi reklam entegrasyonu
Son güncelleme: 2026-08-11
PlayNova host köprüsü üzerinden Banner, interstitial ve rewarded reklamları entegre edin. Oyununuz bir iframe içinde çalışır ve host ile postMessage ile konuşur — pakete üçüncü taraf reklam SDK'ları gömmeyin.
Monetizasyon nasıl çalışır
PlayNova reklamları host tarafında doldurur ve sertifikalı içerik üreticileriyle geliri paylaşır (varsayılan %70 içerik üretici payı). Oyunlar yalnızca show/load ister; envanter, sıklık sınırları ve impression/tıklama raporlamasını host yönetir.
Her mesaj için zarf:
{ "source": "...", "type": "...", "payload": { } }- Oyunlar
sourcedeğeriniplaynova-gameolarak ayarlamalıdır - Host
sourceplaynova-hostile yanıt verir
Reklam formatları:
- Rewarded — oyuncu opt-in (revive, çift ödül, ücretsiz eşya). Ödülleri yalnızca
ads.rewarded_completedsonrası verin. - Interstitial — doğal molalar (seviye tamamlandı / game over). Girdi sırasında asla.
- Banner — host sahipli şerit; oyun yalnızca show/hide ister.
Önerilen yerleşimler
Analitik ve sınırlar için her zaman kararlı bir placement dizesi geçirin. Aşağıdaki platform adlarını tercih edin:
| Placement | Kullanım durumu |
|---|---|
revive | Başarısızlıktan sonra devam |
double_reward | Seviye sonu bonusu |
free_item / unlock | Tüketilebilir veya içerik kilidi açma |
level_complete / level_start / game_over / pause | Interstitial anları |
banner_bottom / banner_top | Banner yuvaları |
Entegrasyon akışı
- Doğal bir molada
ads.load_*çağırın (placementve isteğe bağlırequestIdile). ads.*_loadedbekleyin (veya*_failedişleyin ve reklamsız devam edin).- Aynı
requestId/placementileads.show_*çağırın. - Rewarded için oyun durumunu yalnızca
ads.rewarded_completedüzerinde değiştirin. dismissed/failed durumunda ödül vermeyin.
Bridge mesaj türleri
Kanonik type dizeleri playnova-web (ads-bridge) içinde tanımlıdır. Oyun paketinizi bu tam değerlerle hizalayın.
Oyun → host
| type | Amaç |
|---|---|
ads.load_rewarded | Rewarded envanterini önceden yükle |
ads.show_rewarded | Rewarded göster (yalnızca tamamlandıktan sonra ver) |
ads.load_interstitial | Interstitial önceden yükle |
ads.show_interstitial | Molada interstitial göster |
ads.show_banner | Host Banner görünürlüğü iste |
ads.hide_banner | Host Banner gizle |
ads.preload | Birden fazla formatı önceden yükle |
ads.get_banner_height | Layout için Banner yüksekliğini sorgula |
Host → oyun
| type | Amaç |
|---|---|
ads.rewarded_loaded | Rewarded gösterime hazır |
ads.rewarded_failed | Rewarded load/show başarısız |
ads.rewarded_completed | Rewarded tamamlandı — vermek güvenli |
ads.rewarded_dismissed | Rewarded erken kapatıldı — verme |
ads.interstitial_loaded | Interstitial hazır |
ads.interstitial_failed | Interstitial başarısız |
ads.interstitial_closed | Interstitial kapandı |
ads.banner_shown | Banner görünür |
ads.banner_hidden | Banner gizli |
ads.banner_failed | Banner başarısız |
Kopyala-yapıştır yardımcısı
index.html (veya modül) içine yapıştırın. Ödül vermeyi kendi oyun mantığınızla değiştirin.
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);
});
}
// Örnek: revive akışı
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') {
// ödülü YALNIZCA burada ver
}
});Üretim kuralları
- Otomatik tıklama, zorunlu döngü veya Close / Skip kontrollerini gizleme yok.
- Bu
requestIdiçinads.rewarded_completedalmadan ödül vermeyin. - Host hatalarına saygı: envanter boşsa oyunu zarifçe sürdürün.
- Tetik anında daha az beklemek için show öncesinde load tercih edin.
- Paketlerde üçüncü taraf reklam SDK, izleyici veya pop-under script yok.
- Interstitial sıklığı host tarafından uygulanır; show spam'i yok sayılabilir.
SSS
Zip içinde AdMob / Unity Ads kullanabilir miyim?
Hayır. PlayNova talebi host'ta toplar. Diğer SDK'ları gömmek incelemeyi başarısız kılar ve iframe sandbox varsayımlarını bozar.
Host yanıt vermezse?
Sessizliği veya *_failed durumunu no-fill olarak değerlendirin. Oyuncuyu sonsuz spinner'da bloklamadan devam edin.
Geliri nerede görürüm?
Reklamlar üretimde yayına alındıktan sonra impression ve gelir içerik üretici analitiği içine akar. Ödeme içerik üretici programı şartlarına göre yapılır.
Host köprüsü oyun sayfasında canlı. Yukarıdaki mesaj türleri üretim sözleşmesidir — şimdi uygulayın.
