💡 Jedna linia inicjalizacjiOne-line initialization 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!Just call ADict.init() in your Application class and all modules will be automatically initialized. No need to call init() separately for each module!

1️⃣ Podstawowa inicjalizacjaBasic Initialization

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 inicjalizacjaAdvanced Initialization

Kontrola modułówModule Control
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łyAvailable Modules

StałaConstantOpisDescription
ADict.Modules.ADSModuł reklamAds module (AdMob, HomeAds, mediacje)Ads module (AdMob, HomeAds, mediations)
ADict.Modules.SMART_TIMINGInteligentne momentySmart timing na reklamySmart ad timing
ADict.Modules.SEGMENTSSegmentacjaSegmentation użytkownikówUser segmentation
ADict.Modules.RATING_MANAGERZaawansowane zarządzanie ocenamiAdvanced rating management
ADict.Modules.ONBOARDINGSystem onboardinguOnboarding system
ADict.Modules.TRIGGERSWyzwalaczeTriggers zaangażowaniaEngagement triggers
ADict.Modules.ANALYTICSAgregator analitykiAnalytics aggregator
ADict.Modules.IN_APPIn-App BillingBilling
ADict.Modules.EVENT_BUSEventBus oparty na FlowFlow-based EventBus
ADict.Modules.NOTIFICATIONSManager powiadomień lokalnychLocal notification manager
ADict.Modules.NETWORKMonitor stanu sieciNetwork status monitor
ADict.Modules.ACHIEVEMENTSSystem osiągnięćAchievements system
ADict.Modules.SECURE_STORAGEBezpieczne przechowywanie danychSecure data storage
ADict.Modules.PERFORMANCEMonitoring wydajnościPerformance monitoring
ADict.Modules.FEEDBACKZbieranie feedbackuFeedback collection
💡 Uwaga: Config (Remote Config) działa zawsze, niezależnie od ustawień modułówConfig (Remote Config) always works, regardless of module settings.

3️⃣ Nasłuchiwanie na inicjalizacjęListening for Initialization

Obserwacja fazy inicjalizacjiObserving Initialization Phase
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 zgodyGDPR & Consents

Prośba o zgodęConsent Request
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życieBasic Usage reklamBasic Ad Usage

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 krokiNext Steps

📺

Moduł ADSADS Module

Pełna dokumentacja reklamFull ads documentation

⚙️

KonfiguracjaConfiguration JSONJSON Config

Strefy, strategie, cap/pacingZones, strategies, cap/pacing

💳

In-App BillingBilling

Zakupy i subskrypcjePurchases and subscriptions

📡

EventBus

Komunikacja między komponentamiInter-component communication