Strefy reklamowe, cap/pacing, quarantine, A/B testing
Konfiguracja jest definiowana w JSON (zazwyczaj w Firebase Remote Config).
{
"zones": {
"<zone_name>": {
"providers": ["admob", "unity", "homeads"],
"strategy": "round_robin",
"timeout": 30000,
"homeAdFallback": true,
"adunits": { ... },
"weights": { ... },
"bidders": { ... },
"caps": { ... },
"ab": { ... }
}
}
}
Szczegóły strategii: Strategie mediacji
Limity wyświetleń reklam per sesja/godzina z minimalnym odstępem czasowym.
{
"zones": {
"default": {
"providers": ["admob", "homeads"],
"caps": {
"interstitial": {
"perSession": 3,
"perHour": 6,
"minIntervalMs": 45000
},
"rewarded": {
"perSession": 10,
"perHour": 20,
"minIntervalMs": 0
},
"banner": {
"perSession": 999,
"perHour": 999,
"minIntervalMs": 0
}
}
}
}
}
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
perSession | Int | MAX_INT | Max liczba pokazów w sesji |
perHour | Int | MAX_INT | Max liczba pokazów w ostatniej godzinie |
minIntervalMs | Long | 0 | Minimalny odstęp między pokazami (ms) |
Automatyczna kwarantanna providera po serii błędów.
{
"caps": {
"interstitial": {
"perSession": 5,
"quarantine": {
"mode": "exponential",
"baseMs": 30000,
"stepMs": 30000,
"maxMs": 900000,
"resetOnSuccess": true
}
}
}
}
Fail #1: 30s
Fail #2: 60s (30s * 2)
Fail #3: 120s (30s * 4)
Fail #4: 240s (30s * 8)
Max: 900s (15 min)
Fail #1: 30s
Fail #2: 60s (30s + 30s)
Fail #3: 90s (30s + 2*30s)
Max: 900s (15 min)
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
mode | String | "exponential" | "exponential" lub "linear" |
baseMs | Long | 30000 | Czas startowy kwarantanny |
stepMs | Long | 30000 | Przyrost (tylko linear) |
maxMs | Long | 900000 | Max długość kwarantanny |
resetOnSuccess | Boolean | true | Czy sukces resetuje licznik |
Override'y konfiguracji per bucket.
{
"zones": {
"default": {
"strategy": "round_robin",
"providers": ["admob", "unity"],
"ab": {
"bucket": "A",
"buckets": {
"A": {
"strategy": "priority",
"providers": ["admob", "unity"]
},
"B": {
"strategy": "weighted",
"providers": ["admob", "unity", "applovin"],
"weights": {
"banner": {
"admob": 1,
"unity": 1,
"applovin": 3
}
}
},
"C": {
"strategy": "auction",
"bidders": {
"banner": ["criteo"]
}
}
}
}
}
}
}
ab.bucket
na poziomie głównym - ma pierwszeństwo przed per-strefa.
Fallback dla adUnit gdy nie zdefiniowane w strefie.
{
"banner": "ca-app-pub-xxx/6300978111",
"native": "ca-app-pub-xxx/2247696110",
"interstitial": "ca-app-pub-xxx/1033173712",
"rewarded": "ca-app-pub-xxx/5224354917"
}
zones.<zone>.adunits.<provider>.<format> - strefazones.<zone>.buckets.<bucket>.adunits.<provider>.<format> - bucket A/Badmob_mapping.<format> - globalny fallback{
"zones": {
"default": {
"providers": ["admob"]
}
}
}
{
"zones": {
"default": {
"strategy": "round_robin",
"providers": ["admob", "unity", "homeads"],
"timeout": 30000,
"homeAdFallback": true,
"adunits": {
"admob": {
"banner": "ca-app-pub-xxx/banner",
"native": "ca-app-pub-xxx/native",
"interstitial": "ca-app-pub-xxx/inter",
"rewarded": "ca-app-pub-xxx/reward"
},
"unity": {
"banner": "UNITY_BANNER",
"interstitial": "UNITY_INTER"
}
},
"caps": {
"interstitial": {
"perSession": 5,
"perHour": 10,
"minIntervalMs": 60000,
"quarantine": {
"mode": "exponential",
"baseMs": 30000,
"maxMs": 600000,
"resetOnSuccess": true
}
},
"rewarded": {
"perSession": 20,
"perHour": 50,
"minIntervalMs": 0
}
}
}
}
}
| Pole | Typ | Wymagane | Domyślnie | Opis |
|---|---|---|---|---|
providers | Array | ✅ | - | Lista providerów |
strategy | String | ❌ | "round_robin" | Strategia mediacji |
timeout | Long | ❌ | null | Rotacja czasowa (ms) |
homeAdFallback | Boolean | ❌ | false | HomeAds jako fallback |
adunits | Object | ❌ | {} | Mapowania adUnit |
weights | Object | ❌ | {} | Wagi dla weighted |
bidders | Object | ❌ | {} | Bidderzy dla auction |
caps | Object | ❌ | {} | Cap/pacing per format |
ab | Object | ❌ | null | Konfiguracja A/B |
| Wartość | Opis |
|---|---|
round_robin | Rotacja + timeout |
priority | Zawsze od pierwszego |
random | Losowy start |
weighted | Losowanie z wagami |
auction | Aukcja bidderów |