Apps Kit SDK logoApps Kit SDK
개발자 문서 · AppsKitSDK (AKS) — Android 연동 가이드

5. SDK 및 AdsManager 초기화

5.1 Application 클래스

AppsKitSDKApplication을 상속하고 5개의 추상 멤버를 구현합니다.

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 기본 클래스를 유지해야 한다면, 자체 Application.onCreate()에서 래퍼가 내부적으로 호출하는 것과 동일한 AppsKitSDK 메서드를 직접 호출하면 됩니다.

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

기본 클래스를 상속하지 않으면 인터넷 연결 브로드캐스트/대화상자 처리와 내장된 "애플리케이션 수준의 앱 오프닝 광고" 흐름(onStart에서 자동으로 실행되는 requestSplashAppOpenAd/showAppOpenAd)을 사용할 수 없습니다. 이들은 AppsKitSDKApplication 자체의 인스턴스 메서드이며, AppsKitSDK 객체에는 노출되지 않습니다. 콜드 스타트 시 앱 오프닝 광고를 표시하려면 자체 시작 흐름의 원하는 시점에 AdsManager.loadAppOpen/AdsManager.showAppOpen을 직접 호출하세요(§6 참조).

5.3 액티비티

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 */ }
    }
}

이러한 기본 클래스를 상속하면 첫 화면에서의 광고 네트워크 초기화 및 미리 로드, onResume/onPause에서의 IronSource 수명 주기 전달, 세션/일수 추적, 인터넷 연결 대화상자, 선택적 인앱 업데이트 안내, 해당 화면과 연결된 이벤트를 전송하는 sendAKSEvent(...)를 자동으로 사용할 수 있습니다(§7 참조). (Adjust의 onResume/onPause 전달은 여기서가 아니라 Application 수준에서 처리됩니다. §5.2를 참조하세요.)

인터넷 연결 대화상자

두 기본 액티비티 모두 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를 전달합니다. 연결 관리를 비활성화하면 실제 연결 상태를 추적하지 않기 때문입니다. 정확한 상태가 필요하다면 자체 연결 상태 확인 로직을 사용해 오프라인 UI를 제어하세요.

세로 방향 고정

화면을 세로 방향으로 고정하려면 restrictPortraitOnly()를 호출합니다(두 기본 액티비티 모두에서 사용할 수 있는 protected 메서드).

kotlin
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에 동의 상태를 전달합니다.

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