5. Inicialización del SDK y AdsManager
5.1 Clase Application
Extiende AppsKitSDKApplication e implementa sus cinco miembros abstractos:
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.
}
}onCreate() de la clase base ya se encarga del trabajo principal: llama a AppsKitSDK.initialize/setPlatform/setTestMode/setDevMode, obtiene y guarda la configuración predeterminada, inicia manageRemoteConfigs() y llama a AppsKitSDK.initMMP() para integrar AppsFlyer/Adjust/Solar Engine. No necesitas realizar ninguna de estas llamadas por tu cuenta.
5.2 Inicialización sin extender AppsKitSDKApplication
No es obligatorio extender AppsKitSDKApplication: es una clase contenedora que facilita la integración. Si tu app ya tiene una clase base Application que necesitas conservar, puedes llamar a los mismos métodos de AppsKitSDK que esta utiliza internamente, directamente desde tu propio 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) {}
})
}
}Al no extender la clase base, pierdes la gestión de las notificaciones broadcast y del diálogo de conectividad a internet, así como el flujo integrado de «anuncios de apertura de aplicación a nivel de aplicación» (requestSplashAppOpenAd/showAppOpenAd, activado automáticamente desde onStart). Estos son métodos de instancia de AppsKitSDKApplication y no están expuestos en el objeto AppsKitSDK. Si aun así quieres mostrar un anuncio de apertura de aplicación durante un arranque en frío, llama a AdsManager.loadAppOpen/AdsManager.showAppOpen por tu cuenta (consulta §6) en el punto de tu flujo de inicio donde quieras mostrarlo.
5.3 Activities
Extiende AppsKitSDKBaseActivity (para pantallas basadas en AppCompatActivity) o AppsKitSDKBaseComponentActivity (para pantallas con ComponentActivity sin AppCompat o basadas únicamente en 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 */ }
}
}Al extender estas clases base, obtienes automáticamente: inicialización de las redes publicitarias y precarga en la primera pantalla, reenvío de los eventos del ciclo de vida a IronSource en onResume/onPause, seguimiento de sesiones y del recuento de días, un diálogo de conectividad a internet, avisos opcionales de actualización dentro de la app y sendAKSEvent(...) para enviar eventos asociados a esta pantalla (consulta §7). (El reenvío de onResume/onPause a Adjust se realiza a nivel de Application —consulta §5.2—, no aquí).
Diálogo de conectividad a internet
Ambas Activities base supervisan la conectividad en onResume() y, de forma predeterminada, muestran un diálogo bloqueante de «sin conexión a internet» cuando se pierde la conexión, que se cierra automáticamente al recuperarla. Esta función está activada en todas las pantallas, salvo que la desactives:
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)
}Cuando llamas a
showInternetConnectivity(false), AKS sigue llamando aonInternetConnectivityChange, pero siempre pasatrue, independientemente del estado real de la conexión: deja de supervisar la conectividad real una vez que desactivas su gestión. Si necesitas conocer el estado exacto, usa tu propia comprobación de conectividad para controlar la interfaz que muestras cuando no hay conexión.
Restricción a orientación vertical
Para bloquear una pantalla en orientación vertical, llama a restrictPortraitOnly() (método protegido, disponible en ambas Activities base):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
restrictPortraitOnly()
}Esto llama a setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT) por ti, excepto en Android 8.0 (API 26), donde la llamada se omite deliberadamente, ya que se sabe que setRequestedOrientation provoca cierres inesperados en actividades con temas translúcidos o flotantes en esa versión concreta del sistema operativo.
5.4 Consentimiento e inicialización de anuncios
Una vez que hayas obtenido el consentimiento (por ejemplo, mediante el flujo UMP/CMP de Google), notifícaselo a AKS para que sepa que puede mostrar anuncios:
AdsManager.initializeAds(userHasGivenConsent = true, isCCPAConsent = true)5.5 Eliminación de anuncios y control mediante compras en la app (IAP)
Si tu app ofrece una compra para «eliminar anuncios», intégrala mediante AKS en lugar de controlar las llamadas a anuncios por tu cuenta: cada llamada de carga o visualización ya comprueba este indicador internamente:
AppsKitSDK.setRemoveAdsStatus(true) // call after a successful purchase/restore
AppsKitSDK.getRemoveAdsStatus() // check current status