Apps Kit SDK logoApps Kit SDK
개발자 문서 · 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 기본 클래스를 사용하고 있어 이를 변경할 수 없다면, 내부에서 호출하는 것과 동일한 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) {}
        })
    }
}

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

5.3 Activity

AppCompatActivity 기반 화면에서는 AppsKitSDKBaseActivity를, 일반 ComponentActivity 또는 Compose 전용 화면에서는 AppsKitSDKBaseComponentActivity를 상속합니다.

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를 참조하세요.)

인터넷 연결 다이얼로그

두 기본 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를 전달합니다. 연결 관리를 비활성화하면 실제 연결 상태를 추적하지 않기 때문입니다. 정확한 상태가 필요하다면 직접 연결 상태를 확인하고 그 결과에 따라 자체 오프라인 UI를 제어하세요.

세로 방향 고정

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

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

이 메서드는 setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT)를 대신 호출합니다. 단, Android 8.0(API 26)에서는 의도적으로 호출을 건너뜁니다. 해당 OS 버전에서 반투명/플로팅 테마의 Activity에 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