5. SDK 및 AdsManager 초기화
5.1 Application 클래스
AppsKitSDKApplication을 상속하고 추상 멤버 5개를 구현하세요.
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 기본 클래스를 유지해야 한다면, 자체 Application.onCreate()에서 래퍼가 내부적으로 호출하는 것과 동일한 AppsKitSDK 메서드를 직접 호출하면 됩니다.
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) {}
})
}
}기본 클래스를 상속하지 않으면 인터넷 연결 상태 브로드캐스트/대화상자 처리와 내장된 "애플리케이션 수준 앱 오프닝 광고" 흐름(onStart에서 자동으로 실행되는 requestSplashAppOpenAd/showAppOpenAd)을 사용할 수 없습니다. 이 메서드들은 AppsKitSDKApplication 자체의 인스턴스 메서드이며, AppsKitSDK 객체에는 노출되지 않습니다. 콜드 스타트 시 앱 오프닝 광고를 표시하려면 자체 앱 시작 흐름의 원하는 시점에 AdsManager.loadAppOpen/AdsManager.showAppOpen을 직접 호출하세요(§6 참조).
5.3 액티비티
AppCompatActivity 기반 화면에서는 AppsKitSDKBaseActivity를, 일반 ComponentActivity 또는 Compose 전용 화면에서는 AppsKitSDKBaseComponentActivity를 상속하세요.
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 */ }
}
}이 기본 클래스들을 상속하면 첫 화면에서의 광고 네트워크 초기화 및 사전 로드, onResume/onPause에서의 IronSource 생명주기 콜백 전달, 세션/일수 추적, 인터넷 연결 상태 대화상자, 선택적으로 활성화할 수 있는 인앱 업데이트 안내, 현재 화면과 연결된 이벤트를 전송하는 sendAKSEvent(...)가 자동으로 제공됩니다(§7 참조). (Adjust의 onResume/onPause 콜백 전달은 여기서 처리하지 않고 Application 수준에서 처리합니다. §5.2를 참조하세요.)
인터넷 연결 상태 대화상자
두 기본 액티비티 모두 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를 전달합니다. 연결 상태 관리를 비활성화하면 실제 연결 상태를 추적하지 않기 때문입니다. 이 상황에서 정확한 상태가 필요하다면 자체 연결 상태 확인 로직을 사용해 오프라인 UI를 제어하세요.
세로 모드 고정
화면을 세로 모드로 고정하려면 restrictPortraitOnly()를 호출하세요(protected 메서드이며 두 기본 액티비티 모두에서 사용 가능).
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
restrictPortraitOnly()
}이 메서드는 setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT)를 대신 호출합니다. 단, Android 8.0(API 26)에서는 의도적으로 호출을 건너뜁니다. 해당 OS 버전에서는 반투명/플로팅 테마가 적용된 액티비티에서 setRequestedOrientation을 호출하면 크래시가 발생하는 것으로 알려져 있기 때문입니다.
5.4 동의 및 광고 초기화
사용자 동의를 받은 후(예: Google의 UMP/CMP 흐름 사용) 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