Apps Kit SDK logoApps Kit SDK
Documentación · Integración en Android

5. Inicialización del SDK y AdsManager

5.1 Clase Application

Extiende AppsKitSDKApplication e implementa sus cinco miembros abstractos:

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.
    }
}

onCreate() en 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 configurar la integración con 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 aplicación ya tiene una clase base Application de la que no puedes prescindir, puedes llamar a los mismos métodos de AppsKitSDK que esta invoca internamente, directamente desde tu propio 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) {}
        })
    }
}

Al no extender la clase base, pierdes la gestión de las notificaciones broadcast y los diálogos de conectividad a Internet, así como el flujo integrado de «anuncios de apertura de aplicación a nivel de aplicación» (requestSplashAppOpenAd/showAppOpenAd, que se activa automáticamente desde onStart). Estos son métodos de instancia de la propia AppsKitSDKApplication y no están expuestos en el objeto AppsKitSDK. Si aun así quieres mostrar un anuncio de apertura de aplicación en un arranque en frío, llama a AdsManager.loadAppOpen/AdsManager.showAppOpen por tu cuenta (consulta §6) en el punto de tu propio flujo de inicio que prefieras.

5.3 Activities

Extiende AppsKitSDKBaseActivity (para pantallas basadas en AppCompatActivity) o AppsKitSDKBaseComponentActivity (para pantallas basadas directamente en ComponentActivity o que usan solo 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 */ }
    }
}

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 aplicación y sendAKSEvent(...) para emitir 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 restablecerse. Esta función está activada en todas las pantallas, salvo que la desactives:

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)
}

Cuando llamas a showInternetConnectivity(false), AKS sigue llamando a onInternetConnectivityChange, pero siempre pasa true, independientemente del estado real de la conexión: deja de supervisar la conectividad real una vez que desactivas su gestión. Si necesitas un estado preciso, utiliza tu propia comprobación de conectividad para controlar la interfaz que muestras sin 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):

kotlin
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 se omite deliberadamente, ya que se sabe que setRequestedOrientation provoca cierres inesperados en actividades con temas translúcidos o flotantes en esa versión específica 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ícalo a AKS para que sepa que puede mostrar anuncios:

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

5.5 Eliminación de anuncios / control mediante compras integradas (IAP)

Si tu aplicación ofrece una compra para «eliminar anuncios», intégrala a través de AKS en lugar de controlar las llamadas a anuncios por tu cuenta: todas las llamadas de carga y visualización ya comprueban este indicador internamente:

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