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 método 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 integrar 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, é possível chamar os mesmos métodos de AppsKitSDK que ela usa 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ê deixa de contar com o tratamento de broadcasts e diálogos de conectividade com a internet e com o fluxo integrado de "anúncio de abertura do app 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 exibir um anúncio de abertura do app (App Open) em uma 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 com ComponentActivity simples ou apenas 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 */ }
    }
}

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

Diálogo de conectividade com a internet

As duas 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 ativo 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 não monitora a conectividade real depois que você desativa esse gerenciamento. Se precisar do estado preciso da conexão 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 nas duas 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 há um problema conhecido em que setRequestedOrientation causa falhas em Activities com temas translúcidos ou flutuantes nessa versão específica do sistema operacional.

5.4 Consentimento e inicialização de anúncios

Depois de coletar 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 vende uma opção de "remover anúncios", integre-a ao AKS em vez de controlar as chamadas de anúncios manualmente — todas as chamadas de carregamento e exibição já verificam essa flag internamente:

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