💡 Jedna linia inicjalizacji Wystarczy wywołać ADict.init() w klasie Application, a wszystkie moduły zostaną automatycznie zainicjalizowane. Nie musisz wywoływać osobno init() dla każdego modułu!

1️⃣ Podstawowa inicjalizacja

MyApplication.kt
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()

        // Podstawowa inicjalizacja (wszystkie moduły włączone)
        ADict.init(
            context = this,
            debuggable = BuildConfig.DEBUG
        )

        // Opcjonalnie: Debug overlay
        ADict.ADS.DebugOverlay.install(
            this,
            DebugOverlay.Config(
                startVisible = false,
                startCollapsed = true,
                showInRelease = false
            )
        )

        // Opcjonalnie: HomeAds jako fallback
        ADict.ADS.HomeAds.register(
            zone = "default",
            cfg = HomeAds.ZoneConfig(
                banner = mapOf("default" to listOf(
                    HomeAds.Source.Layout(R.layout.homeads_banner)
                ))
            ),
            strategy = HomeAds.Strategy.RANDOM
        )
    }
}

2️⃣ Zaawansowana inicjalizacja

Kontrola modułów
ADict.init(
    context = this,
    debuggable = BuildConfig.DEBUG,
    initProviders = listOf(Providers.ADMOB, Providers.HOMEADS),
    providerMediators = mapOf(
        Providers.ADMOB to listOf("facebook", "unity")
    ),
    // Kontrola które moduły zainicjalizować
    initModules = mapOf(
        ADict.Modules.ADS to true,           // reklamy
        ADict.Modules.SMART_TIMING to true,
        ADict.Modules.SEGMENTS to true,
        ADict.Modules.RATING_MANAGER to true,
        ADict.Modules.ONBOARDING to true,
        ADict.Modules.TRIGGERS to true,
        ADict.Modules.ANALYTICS to true,
        ADict.Modules.IN_APP to true,        // In-App Billing
        ADict.Modules.EVENT_BUS to true,
        ADict.Modules.NOTIFICATIONS to false, // wyłączony
        ADict.Modules.PERFORMANCE to false    // wyłączony
    ),
    initTimeoutMs = 15_000L
)

📦 Dostępne moduły

StałaOpis
ADict.Modules.ADSModuł reklam (AdMob, HomeAds, mediacje)
ADict.Modules.SMART_TIMINGInteligentne momenty na reklamy
ADict.Modules.SEGMENTSSegmentacja użytkowników
ADict.Modules.RATING_MANAGERZaawansowane zarządzanie ocenami
ADict.Modules.ONBOARDINGSystem onboardingu
ADict.Modules.TRIGGERSWyzwalacze zaangażowania
ADict.Modules.ANALYTICSAgregator analityki
ADict.Modules.IN_APPIn-App Billing
ADict.Modules.EVENT_BUSEventBus oparty na Flow
ADict.Modules.NOTIFICATIONSManager powiadomień lokalnych
ADict.Modules.NETWORKMonitor stanu sieci
ADict.Modules.ACHIEVEMENTSSystem osiągnięć
ADict.Modules.SECURE_STORAGEBezpieczne przechowywanie danych
ADict.Modules.PERFORMANCEMonitoring wydajności
ADict.Modules.FEEDBACKZbieranie feedbacku
💡 Uwaga: Config (Remote Config) działa zawsze, niezależnie od ustawień modułów.

3️⃣ Nasłuchiwanie na inicjalizację

Obserwacja fazy inicjalizacji
lifecycleScope.launch {
    repeatOnLifecycle(Lifecycle.State.STARTED) {
        ADict.initPhase.collect { phase ->
            when (phase) {
                is InitPhase.NotStarted -> {
                    // Jeszcze nie rozpoczęto
                }
                is InitPhase.InProgress -> {
                    // Trwa inicjalizacja
                    showLoadingIndicator()
                }
                is InitPhase.Done -> {
                    // Gotowe! Można ładować reklamy
                    hideLoadingIndicator()
                    phase.results.forEach { (provider, result) ->
                        Log.d("ADict", "$provider: ${result.success}, ${result.tookMs}ms")
                    }
                }
            }
        }
    }
}

4️⃣ GDPR i zgody

Prośba o zgodę
ADict.GDPR.requestAndShowIfRequired(
    activity = this,
    isUnderAge = false,
    debug = if (BuildConfig.DEBUG) {
        GDPR.DebugConfig(forceGeographyEea = true)
    } else null
) { result ->
    if (result.canRequestAds) {
        loadAds()
    }
}

5️⃣ Podstawowe użycie reklam

Banner (XML)
<rip.nerd.adictlibrary.ui.AdViewContainer
    android:id="@+id/bannerAd"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:providerName="admob"
    app:zoneName="default"
    app:adSizeEnum="adaptive"
    app:homeAdFallback="true" />
Interstitial (Kotlin)
lifecycleScope.launch {
    val shown = FullscreenRotator.showInterstitial(
        activity = this@MainActivity,
        zone = "default"
    )
    if (shown) {
        Log.d("Ad", "Interstitial wyświetlony")
    }
}

📚 Następne kroki

📺

Moduł ADS

Pełna dokumentacja reklam

⚙️

Konfiguracja JSON

Strefy, strategie, cap/pacing

💳

In-App Billing

Zakupy i subskrypcje

📡

EventBus

Komunikacja między komponentami