5. Инициализация SDK и AdsManager
5.1 Класс Application
Унаследуйте свой класс от AppsKitSDKApplication и реализуйте пять абстрактных методов:
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():
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):
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() и по умолчанию показывают блокирующий диалог «Нет подключения к интернету» при потере соединения, автоматически закрывая его после восстановления связи. Эта функция включена для каждого экрана, пока вы её не отключите:
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):
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, чтобы разрешить показ рекламы:
AdsManager.initializeAds(userHasGivenConsent = true, isCCPAConsent = true)5.5 Отключение рекламы через встроенные покупки (IAP)
Если в вашем приложении есть покупка «Отключить рекламу», настройте её через AKS вместо самостоятельного добавления проверок перед вызовами рекламы: каждый вызов загрузки или показа уже проверяет этот флаг внутри:
AppsKitSDK.setRemoveAdsStatus(true) // call after a successful purchase/restore
AppsKitSDK.getRemoveAdsStatus() // check current status