📖 Przegląd

HomeAds to system wewnętrznych reklam używanych jako fallback gdy zewnętrzne sieci (np. AdMob) nie dostarczą reklamy. Możesz wyświetlać własne layouty, promować inne aplikacje lub pokazywać reklamy wewnętrzne.

⚠️ Struktura: zone to nazwa strefy, a klucze w mapie to unit keys - biblioteka szuka najpierw konkretnego unit key, potem fallback do "default".

📝 Rejestracja

Pełna konfiguracja
ADict.ADS.HomeAds.register(
    zone = "feed",                    // Nazwa STREFY
    cfg = HomeAds.ZoneConfig(
        banner = mapOf(
            "default" to listOf(      // Domyślny UNIT KEY
                HomeAds.Source.Layout(R.layout.homeads_banner_1),
                HomeAds.Source.Layout(R.layout.homeads_banner_2),
                HomeAds.Source.Factory { ctx -> MyCustomBanner(ctx) }
            ),
            "premium" to listOf(      // Inny UNIT KEY
                HomeAds.Source.Layout(R.layout.homeads_banner_premium)
            ),
            "sidebar" to listOf(
                HomeAds.Source.Layout(R.layout.homeads_banner_sidebar)
            )
        ),
        native = mapOf(
            "default" to listOf(
                HomeAds.Source.Layout(R.layout.homeads_native_card)
            )
        ),
        interstitial = mapOf(
            "default" to listOf(
                HomeAds.Source.Layout(R.layout.homeads_fullscreen)
            )
        ),
        rewarded = mapOf(
            "default" to listOf(
                HomeAds.RewardSource(
                    source = HomeAds.Source.Layout(R.layout.homeads_rewarded),
                    type = "coins",
                    amount = 10.0,
                    grantOnClose = true
                )
            )
        )
    ),
    strategy = HomeAds.Strategy.ROUND_ROBIN
)

// Wyczyszczenie konfiguracji
ADict.ADS.HomeAds.clear()

🎯 Strategie wyboru layoutu

StrategiaOpis
FIRSTZawsze pierwszy layout z listy
RANDOMLosowy wybór z listy
ROUND_ROBINRotacja po kolei

📐 Źródła (Source)

Layout

HomeAds.Source.Layout(R.layout.my_homeads_banner)

Factory (dynamiczne)

HomeAds.Source.Factory { context ->
    MyCustomAdView(context).apply {
        setImage(R.drawable.promo)
        setClickListener { openPromo() }
    }
}

RewardSource (dla rewarded)

HomeAds.RewardSource(
    source = HomeAds.Source.Layout(R.layout.homeads_rewarded),
    type = "coins",           // typ nagrody
    amount = 10.0,            // ilość
    grantOnClose = true       // przyznaj po zamknięciu
)

🔧 Jak biblioteka wybiera layout

Wybór layoutu
// Użyje "default" (automatycznie)
HomeAds.pickBanner(context, zone = "feed", unitKey = "default")

// Użyje "premium"
HomeAds.pickBanner(context, zone = "feed", unitKey = "premium")

// Użyje "sidebar"
HomeAds.pickBanner(context, zone = "feed", unitKey = "sidebar")

// Jeśli unitKey nie istnieje - fallback do "default"
HomeAds.pickBanner(context, zone = "feed", unitKey = "nieistniejacy")
// → użyje "default"

📝 Konfiguracja JSON (fallback)

Remote Config
{
  "zones": {
    "feed": {
      "providers": ["admob", "homeads"],
      "homeAdFallback": true
    }
  }
}

Gdy homeAdFallback: true, biblioteka automatycznie użyje HomeAds jako ostatniej próby gdy żaden zewnętrzny provider nie dostarczy reklamy.