5. Inicialização do SDK e do AdsManager
5.1 Classe Application
Estenda AppsKitSDKApplication e implemente seus cinco membros abstratos:
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, obtém 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 — é uma classe que encapsula a integração para facilitar seu uso. Se o app já tem uma classe base Application que você não pode substituir, é possível chamar os mesmos métodos de AppsKitSDK que ela chama internamente, diretamente no seu próprio Application.onCreate():
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 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 de abertura do app em uma inicialização a frio (cold start), chame AdsManager.loadAppOpen/AdsManager.showAppOpen manualmente (consulte §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 ou somente Compose):
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ê obtém 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, solicitações opcionais de atualização no app e sendAKSEvent(...) para disparar eventos vinculados a essa tela (consulte §7). (O encaminhamento de onResume/onPause para o próprio Adjust acontece no nível de Application — consulte §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:
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 chamandoonInternetConnectivityChange, mas sempre passatrue, independentemente do estado real da conexão — ele deixa de monitorar a conectividade real quando você desativa esse gerenciamento. Se precisar do estado correto nesse caso, use sua própria verificação de conectividade para controlar a interface de modo offline.
Restrição ao modo retrato
Para fixar uma tela no modo retrato, chame restrictPortraitOnly() (protegido, disponível em ambas as Activities base):
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 de propósito, 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 ao AKS que a exibição de anúncios está autorizada:
AdsManager.initializeAds(userHasGivenConsent = true, isCCPAConsent = true)5.5 Remoção de anúncios / controle por compras no app (IAP)
Se o app oferece uma compra para "remover anúncios", integre-a ao AKS em vez de controlar as chamadas de anúncios manualmente — cada chamada de carregamento/exibição já verifica essa flag internamente:
AppsKitSDK.setRemoveAdsStatus(true) // call after a successful purchase/restore
AppsKitSDK.getRemoveAdsStatus() // check current status