📖 Przegląd

ADict to główny obiekt singleton biblioteki, zapewniający dostęp do wszystkich modułów oraz funkcję inicjalizacji. Wystarczy wywołać ADict.init() w klasie Application, a wszystkie moduły zostaną automatycznie zainicjalizowane.

Struktura obiektu ADict
object ADict {
    // Moduły Core
    val ADS: ADS              // Moduł reklam
    val Config: Config        // Remote Config
    val GDPR: GDPR            // Zgody użytkownika
    val InApp: InApp          // In-App Billing
    val ReviewTrap            // Prośba o ocenę

    // Moduły zaangażowania
    val Features              // Feature flags
    val SmartTiming           // Inteligentne momenty na reklamy
    val Segments              // Segmentacja użytkowników
    val RatingManager         // Zarządzanie ocenami
    val Onboarding            // System onboardingu
    val Triggers              // Wyzwalacze zaangażowania

    // Moduły pomocnicze
    val Analytics             // Agregator analityki
    val EventBus              // System eventów
    val DeepLinks             // Deep linking
    val Paywall               // Kreator paywall'i
    val Notifications         // Powiadomienia lokalne
    val Network               // Monitor sieci
    val Achievements          // System osiągnięć
    val SecureStorage         // Szyfrowane przechowywanie
    val Performance           // Monitor wydajności
    val Feedback              // Zbieranie opinii

    // Stan
    val initPhase: StateFlow<InitPhase>  // Stan inicjalizacji
    val RC: RemoteConfigRepo?            // Skrót do Remote Config

    fun init(...)             // Główna inicjalizacja
}

🚀 Inicjalizacja

init(context, debuggable, initProviders, providerMediators, initModules, initTimeoutMs, scope)

Główna funkcja inicjalizująca bibliotekę i wszystkie moduły.

ParametrTypDomyślnieOpis
contextContext-Kontekst aplikacji
debuggableBoolean-Tryb debug (logi, testowe reklamy)
initProvidersList<String>[ADMOB]Providery reklam do init
providerMediatorsMap{}Mediatorzy per provider
initModulesMap<String, Boolean>ALL_ENABLEDKtóre moduły włączyć
initTimeoutMsLong12000Timeout inicjalizacji
scopeCoroutineScopeMainScope dla coroutines
Podstawowa inicjalizacja
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()

        ADict.init(
            context = this,
            debuggable = BuildConfig.DEBUG
        )
    }
}
Zaawansowana inicjalizacja
ADict.init(
    context = this,
    debuggable = BuildConfig.DEBUG,
    initProviders = listOf(Providers.ADMOB, Providers.HOMEADS),
    providerMediators = mapOf(
        Providers.ADMOB to listOf("facebook", "unity")
    ),
    initModules = mapOf(
        ADict.Modules.ADS to true,
        ADict.Modules.SMART_TIMING to true,
        ADict.Modules.SEGMENTS to true,
        ADict.Modules.ANALYTICS to true,
        ADict.Modules.IN_APP to true,
        ADict.Modules.NOTIFICATIONS to false,  // wyłączony
        ADict.Modules.PERFORMANCE to false     // wyłączony
    ),
    initTimeoutMs = 15_000L
)

📦 Stałe modułów

Obiekt ADict.Modules zawiera stałe nazw modułów:

StałaWartośćOpis
ADS"ads"Moduł reklam
SMART_TIMING"smart_timing"Inteligentne momenty
SEGMENTS"segments"Segmentacja
RATING_MANAGER"rating_manager"Zarządzanie ocenami
ONBOARDING"onboarding"Onboarding
TRIGGERS"triggers"Wyzwalacze
ANALYTICS"analytics"Analityka
IN_APP"in_app"Billing
EVENT_BUS"event_bus"EventBus
NOTIFICATIONS"notifications"Powiadomienia
NETWORK"network"Monitor sieci
ACHIEVEMENTS"achievements"Osiągnięcia
SECURE_STORAGE"secure_storage"Szyfrowane dane
PERFORMANCE"performance"Wydajność
FEEDBACK"feedback"Feedback

Presety

📡 Obserwacja inicjalizacji

Nasłuchiwanie na stan 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!
                    hideLoadingIndicator()
                    phase.results.forEach { (provider, result) ->
                        Log.d("ADict", "$provider: success=${result.success}, took=${result.tookMs}ms")
                    }
                }
            }
        }
    }
}