Apps Kit SDK logoApps Kit SDK
Документация · AppsKitSDK (AKS) — руководство по интеграции для Android

5. Инициализация SDK и AdsManager

5.1 Класс Application

Создайте подкласс AppsKitSDKApplication и реализуйте пять его абстрактных методов:

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() базового класса уже выполняет за вас основную работу: вызывает AppsKitSDK.initialize/setPlatform/setTestMode/setDevMode, получает и сохраняет конфигурацию по умолчанию, запускает manageRemoteConfigs() и вызывает AppsKitSDK.initMMP() для подключения AppsFlyer/Adjust/Solar Engine. Самостоятельно вызывать эти методы не нужно.

5.2 Инициализация без наследования от AppsKitSDKApplication

Наследоваться от AppsKitSDKApplication необязательно — это обёртка для удобства. Если у вашего приложения уже есть собственный базовый класс Application, от которого вы не можете отказаться, вызывайте те же методы AppsKitSDK, которые обёртка использует внутри, непосредственно из своего 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) {}
        })
    }
}

Без наследования от базового класса вы лишаетесь обработки широковещательных уведомлений о подключении к интернету и соответствующего диалога, а также встроенного сценария показа рекламы при открытии приложения (App Open) на уровне приложения (requestSplashAppOpenAd/showAppOpenAd, автоматически запускаемого из onStart). Это методы экземпляра самого AppsKitSDKApplication, они недоступны через объект AppsKitSDK. Если вам всё же нужна реклама App Open при холодном запуске, самостоятельно вызывайте AdsManager.loadAppOpen/AdsManager.showAppOpen (см. §6) в нужный момент своего сценария запуска.

5.3 Activity

Наследуйтесь от AppsKitSDKBaseActivity (для экранов на базе AppCompatActivity) или AppsKitSDKBaseComponentActivity (для экранов на базе обычного 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 */ }
    }
}

Наследование от этих базовых классов автоматически обеспечивает инициализацию рекламных сетей и предзагрузку рекламы на первом экране, передачу событий жизненного цикла IronSource в onResume/onPause, учёт сеансов и количества дней, диалог о подключении к интернету, опциональные предложения обновить приложение, а также метод sendAKSEvent(...) для отправки событий, привязанных к этому экрану (см. §7). (Передача вызовов onResume/onPause в Adjust выполняется на уровне Application — см. §5.2, — а не здесь.)

Диалог о подключении к интернету

Оба базовых класса Activity отслеживают подключение в onResume() и по умолчанию показывают блокирующий диалог «Нет подключения к интернету» при потере соединения, автоматически закрывая его после восстановления связи. Эта функция включена для каждого экрана, пока вы её не отключите:

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

После вызова showInternetConnectivity(false) AKS по-прежнему вызывает onInternetConnectivityChange, но всегда передаёт true независимо от фактического состояния подключения: после отключения этой функции реальное состояние соединения больше не отслеживается. Если вам нужно точное состояние подключения, используйте собственную проверку для управления интерфейсом офлайн-режима.

Фиксация портретной ориентации

Чтобы зафиксировать портретную ориентацию экрана, вызовите restrictPortraitOnly() (защищённый метод, доступный в обоих базовых классах Activity):

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

Этот метод вызывает за вас setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT), кроме Android 8.0 (API 26), где вызов намеренно пропускается: известно, что именно в этой версии ОС setRequestedOrientation может приводить к сбою в Activity с полупрозрачной темой или темой плавающего окна.

5.4 Согласие пользователя и инициализация рекламы

Получив согласие пользователя (например, через механизм UMP/CMP от Google), сообщите об этом AKS, чтобы разрешить показ рекламы:

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

5.5 Отключение рекламы через встроенные покупки (IAP)

Если в вашем приложении можно купить отключение рекламы, настройте его через AKS вместо самостоятельной проверки перед рекламными вызовами: каждый вызов загрузки или показа уже проверяет этот флаг внутри:

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