📁 Struktura konfiguracji

Konfiguracja jest definiowana w JSON (zazwyczaj w Firebase Remote Config).

Podstawowa struktura
{
  "zones": {
    "<zone_name>": {
      "providers": ["admob", "unity", "homeads"],
      "strategy": "round_robin",
      "timeout": 30000,
      "homeAdFallback": true,
      "adunits": { ... },
      "weights": { ... },
      "bidders": { ... },
      "caps": { ... },
      "ab": { ... }
    }
  }
}

Szczegóły strategii: Strategie mediacji

📊 Cap & Pacing

Limity wyświetleń reklam per sesja/godzina z minimalnym odstępem czasowym.

Konfiguracja caps
{
  "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
        }
      }
    }
  }
}

Parametry caps

ParametrTypDomyślnieOpis
perSessionIntMAX_INTMax liczba pokazów w sesji
perHourIntMAX_INTMax liczba pokazów w ostatniej godzinie
minIntervalMsLong0Minimalny odstęp między pokazami (ms)

🔄 Quarantine (kwarantanna)

Automatyczna kwarantanna providera po serii błędów.

Konfiguracja quarantine
{
  "caps": {
    "interstitial": {
      "perSession": 5,
      "quarantine": {
        "mode": "exponential",
        "baseMs": 30000,
        "stepMs": 30000,
        "maxMs": 900000,
        "resetOnSuccess": true
      }
    }
  }
}

Tryby kwarantanny

Exponential (domyślny)

Fail #1: 30s
Fail #2: 60s (30s * 2)
Fail #3: 120s (30s * 4)
Fail #4: 240s (30s * 8)
Max: 900s (15 min)

Linear

Fail #1: 30s
Fail #2: 60s (30s + 30s)
Fail #3: 90s (30s + 2*30s)
Max: 900s (15 min)

Parametry quarantine

ParametrTypDomyślnieOpis
modeString"exponential""exponential" lub "linear"
baseMsLong30000Czas startowy kwarantanny
stepMsLong30000Przyrost (tylko linear)
maxMsLong900000Max długość kwarantanny
resetOnSuccessBooleantrueCzy sukces resetuje licznik

🧪 A/B Testing

Override'y konfiguracji per bucket.

Konfiguracja A/B
{
  "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"]
            }
          }
        }
      }
    }
  }
}
💡 Globalny bucket: Można ustawić globalny ab.bucket na poziomie głównym - ma pierwszeństwo przed per-strefa.

🌍 Globalne mapowania

Fallback dla adUnit gdy nie zdefiniowane w strefie.

admob_mapping w Remote Config
{
  "banner": "ca-app-pub-xxx/6300978111",
  "native": "ca-app-pub-xxx/2247696110",
  "interstitial": "ca-app-pub-xxx/1033173712",
  "rewarded": "ca-app-pub-xxx/5224354917"
}

Kolejność szukania adUnit

  1. zones.<zone>.adunits.<provider>.<format> - strefa
  2. zones.<zone>.buckets.<bucket>.adunits.<provider>.<format> - bucket A/B
  3. admob_mapping.<format> - globalny fallback

📝 Przykłady kompletne

Minimalna konfiguracja
{
  "zones": {
    "default": {
      "providers": ["admob"]
    }
  }
}
Pełna produkcyjna konfiguracja
{
  "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
        }
      }
    }
  }
}

📋 Ściąga pól

Strefa (zone)

PoleTypWymaganeDomyślnieOpis
providersArray-Lista providerów
strategyString"round_robin"Strategia mediacji
timeoutLongnullRotacja czasowa (ms)
homeAdFallbackBooleanfalseHomeAds jako fallback
adunitsObject{}Mapowania adUnit
weightsObject{}Wagi dla weighted
biddersObject{}Bidderzy dla auction
capsObject{}Cap/pacing per format
abObjectnullKonfiguracja A/B

Wartości strategy

WartośćOpis
round_robinRotacja + timeout
priorityZawsze od pierwszego
randomLosowy start
weightedLosowanie z wagami
auctionAukcja bidderów