Apps Kit SDK logoApps Kit SDK
Documentação · AppsKitSDK (AKS) — Guia de integração para Android

5. Inicialização do SDK e do AdsManager

5.1 Classe Application

Estenda AppsKitSDKApplication e implemente seus cinco membros abstratos:

kotlin
class YourApplication : AppsKitSDKApplication() {

    // Encrypted default-config JSON to fall back on before Remote Config is fetched.
    // Provided to you from the AKS portal for your app.
    override fun setAKSDefaultConfigs(): String = "<encrypted-config-json-from-aks-portal>"

    override fun isTestMode(): Boolean = BuildConfig.DEBUG

    override fun isDevMode(): Boolean = BuildConfig.DEBUG

    override fun setPlatform(): Platform = Platform.GOOGLE // or Platform.AMAZON

    override fun onConfigsReadyToUse(remoteConfig: FirebaseRemoteConfig) {
        // Called once Firebase Remote Config has been fetched/activated.
        // Optional hook if you need to read custom remote-config keys yourself.
    }
}

O onCreate() da classe base já faz o trabalho pesado para você — chama AppsKitSDK.initialize/setPlatform/setTestMode/setDevMode, busca e salva a configuração padrão, inicia manageRemoteConfigs() e chama AppsKitSDK.initMMP() para configurar a integração com AppsFlyer/Adjust/Solar Engine. Você não precisa chamar nada disso manualmente.

5.2 Inicialização sem estender AppsKitSDKApplication

Estender AppsKitSDKApplication não é obrigatório — ela é um wrapper para facilitar a integração. Se o seu app já tem uma classe base Application que você não pode substituir, você pode chamar os mesmos métodos de AppsKitSDK que ela chama internamente, diretamente no seu próprio Application.onCreate():

kotlin
class YourApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        FirebaseApp.initializeApp(this)

        AppsKitSDK.initialize(PlatformContext(this), this)
        AppsKitSDK.setPlatform(Platform.GOOGLE) // or Platform.AMAZON
        AppsKitSDK.setTestMode(BuildConfig.DEBUG)
        AppsKitSDK.setDevMode(BuildConfig.DEBUG)
        AppsKitSDK.setTimeToFetchRemoteConfigInSeconds(3600) // optional, defaults to 3600

        AppsKitSDK.saveDefaultConfigJson("<encrypted-config-json-from-aks-portal>")
        AppsKitSDK.manageRemoteConfigs(object : OnRemoteConfigAvailable {
            override fun onRemoteConfigReadyToFetch(remoteConfig: FirebaseRemoteConfig) {
                // optional — your own hook into the fetched remote config
            }
        })

        AppsKitSDK.initMMP() // wires up AppsFlyer / Adjust / Solar Engine from remote-config keys

        // AppsKitSDKApplication does this for you via ActivityLifecycleCallbacks. Without it,
        // AppsKitSDK has no "current activity" — native-ad preloading and any code that calls
        // AppsKitSDK.getCurrentActivity() won't have a target to work with.
        registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
            override fun onActivityResumed(activity: Activity) {
                AppsKitSDK.setCurrentActivity(PlatformActivity(activity))
                Adjust.onResume() // keeps Adjust session tracking accurate
            }
            override fun onActivityPaused(activity: Activity) {
                Adjust.onPause()
            }
            override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
            override fun onActivityStarted(activity: Activity) {}
            override fun onActivityStopped(activity: Activity) {}
            override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
            override fun onActivityDestroyed(activity: Activity) {}
        })
    }
}

Ao não estender a classe base, você abre mão do tratamento de broadcasts e diálogos de conectividade com a internet e do fluxo integrado de "anúncio de abertura do app (App Open) no nível da aplicação" (requestSplashAppOpenAd/showAppOpenAd, acionado automaticamente em onStart) — esses são métodos de instância da própria AppsKitSDKApplication, não expostos no objeto AppsKitSDK. Se ainda quiser um anúncio App Open na inicialização a frio (cold start), chame AdsManager.loadAppOpen/AdsManager.showAppOpen manualmente (veja §6) no ponto desejado do seu próprio fluxo de inicialização.

5.3 Activities

Estenda AppsKitSDKBaseActivity (para telas baseadas em AppCompatActivity) ou AppsKitSDKBaseComponentActivity (para telas que usam apenas ComponentActivity/Compose):

kotlin
class HomeActivity : AppsKitSDKBaseActivity() {

    override fun setScreenNameAndId(): Pair<Int, String> = Pair(1, "Home")

    override fun enableAppAutoUpdate(): Boolean = true

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState) // required — this drives ad-network init, preloading,
                                            // session/day tracking, and the auto SCREEN event
        setContent { /* your Compose UI */ }
    }
}

Estender essas classes base oferece automaticamente: inicialização das redes de anúncios e pré-carregamento na primeira tela, encaminhamento dos eventos de ciclo de vida para IronSource em onResume/onPause, acompanhamento de sessões e contagem de dias, um diálogo de conectividade com a internet, avisos opcionais de atualização no app e sendAKSEvent(...) para disparar eventos vinculados a essa tela (veja §7). (O encaminhamento de onResume/onPause para Adjust acontece no nível de Application — veja §5.2 — e não aqui.)

Diálogo de conectividade com a internet

Ambas as Activities base monitoram a conectividade em onResume() e, por padrão, exibem um diálogo bloqueante de "sem internet" sempre que a conexão cai, fechando-o automaticamente quando a conexão é restabelecida. Esse comportamento fica ativado em todas as telas, a menos que você o desative:

kotlin
class HomeActivity : AppsKitSDKBaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        showInternetConnectivity(false) // opt this screen out of the automatic dialog
    }

    // Called on every connectivity change, dialog or not — hook your own UI here
    override fun onInternetConnectivityChange(isInternetAvailable: Boolean?) {
        // e.g. show/hide your own offline banner
    }

    // Optional — return an anchor view to get a "back online" Snackbar when the
    // dialog dismisses on reconnect. Returns null (no Snackbar) by default.
    override fun getSnackBarView(): View? = findViewById(R.id.rootLayout)
}

Quando você chama showInternetConnectivity(false), o AKS continua chamando onInternetConnectivityChange, mas sempre passa true, independentemente do estado real da conexão — ele deixa de monitorar a conectividade real quando você desativa esse gerenciamento. Se precisar do estado correto aqui, use sua própria verificação de conectividade para controlar a interface de modo offline.

Restrição à orientação retrato

Para fixar uma tela na orientação retrato, chame restrictPortraitOnly() (método protegido, disponível em ambas as Activities base):

kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    restrictPortraitOnly()
}

Isso chama setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT) para você — exceto no Android 8.0 (API 26), em que a chamada é ignorada intencionalmente, pois setRequestedOrientation pode causar falhas em Activities com temas translúcidos/flutuantes nessa versão específica do sistema operacional.

5.4 Consentimento e inicialização de anúncios

Depois de obter o consentimento (por exemplo, pelo fluxo UMP/CMP do Google), informe o AKS para que ele saiba que os anúncios podem ser exibidos:

kotlin
AdsManager.initializeAds(userHasGivenConsent = true, isCCPAConsent = true)

5.5 Remoção de anúncios / controle por compras no app (IAP)

Se o seu app oferece uma compra para "remover anúncios", integre essa opção pelo AKS em vez de bloquear as chamadas de anúncios manualmente — cada chamada de carregamento/exibição já verifica essa flag internamente:

kotlin
AppsKitSDK.setRemoveAdsStatus(true)   // call after a successful purchase/restore
AppsKitSDK.getRemoveAdsStatus()       // check current status