Apps Kit SDK logoApps Kit SDK
Dokümantasyon · AppsKitSDK (AKS) — Android Entegrasyon Kılavuzu

5. SDK ve AdsManager'ı Başlatma

5.1 Application sınıfı

AppsKitSDKApplication sınıfından türetin ve beş soyut üyesini uygulayın:

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

Temel sınıftaki onCreate(), gerekli işlemleri zaten sizin yerinize yapar: AppsKitSDK.initialize/setPlatform/setTestMode/setDevMode çağrılarını yapar, varsayılan yapılandırmayı alıp kaydeder, manageRemoteConfigs() işlemini başlatır ve AppsFlyer/Adjust/Solar Engine entegrasyonunu kurmak için AppsKitSDK.initMMP() metodunu çağırır. Bunları kendiniz çağırmanıza gerek yoktur.

5.2 AppsKitSDKApplication sınıfından türetmeden başlatma

AppsKitSDKApplication sınıfından türetmek zorunlu değildir; bu sınıf, kullanım kolaylığı sağlayan bir sarmalayıcıdır. Uygulamanızın vazgeçemeyeceğiniz kendi Application temel sınıfı varsa, bu sarmalayıcının dahili olarak çağırdığı AppsKitSDK metotlarını doğrudan kendi Application.onCreate() metodunuzdan çağırabilirsiniz:

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

Temel sınıftan türetmediğinizde şu özelliklerden yararlanamazsınız: internet bağlantısı yayınlarının ve iletişim kutusunun yönetimi ile yerleşik "uygulama düzeyinde uygulama açılış reklamı" akışı (onStart üzerinden otomatik olarak tetiklenen requestSplashAppOpenAd/showAppOpenAd). Bunlar doğrudan AppsKitSDKApplication sınıfının örnek metotlarıdır ve AppsKitSDK nesnesi üzerinden sunulmaz. Soğuk başlatmada yine de bir uygulama açılış reklamı göstermek istiyorsanız, kendi başlangıç akışınızda uygun gördüğünüz noktada AdsManager.loadAppOpen/AdsManager.showAppOpen metotlarını kendiniz çağırın (bkz. §6).

5.3 Activity sınıfları

AppsKitSDKBaseActivity (AppCompatActivity tabanlı ekranlar için) veya AppsKitSDKBaseComponentActivity (yalın ComponentActivity kullanan ya da yalnızca Compose ile oluşturulan ekranlar için) sınıfından türetin:

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

Bu temel sınıflardan türetmek şu özellikleri otomatik olarak sağlar: ilk ekranda reklam ağlarının başlatılması ve reklamların önceden yüklenmesi, onResume/onPause içinde IronSource yaşam döngüsü çağrılarının iletilmesi, oturum ve gün sayısı takibi, internet bağlantısı iletişim kutusu, isteğe bağlı uygulama içi güncelleme istemleri ve bu ekranla ilişkili olayları göndermek için sendAKSEvent(...) (bkz. §7). (Adjust için onResume/onPause çağrılarının iletilmesi burada değil, Application düzeyinde gerçekleşir; bkz. §5.2.)

İnternet bağlantısı iletişim kutusu

Her iki temel Activity sınıfı da onResume() içinde bağlantıyı izler ve varsayılan olarak bağlantı her kesildiğinde kullanıcı etkileşimini engelleyen bir "internet bağlantısı yok" iletişim kutusu gösterir. Bağlantı yeniden kurulduğunda bu kutu otomatik olarak kapanır. Devre dışı bırakmadığınız sürece bu özellik her ekranda etkindir:

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) çağrıldığında AKS, onInternetConnectivityChange metodunu çağırmaya devam eder; ancak gerçek bağlantı durumundan bağımsız olarak her zaman true iletir. Bağlantı yönetimini devre dışı bıraktığınızda gerçek bağlantı durumunu takip etmez. Burada doğru durum bilgisine ihtiyacınız varsa, çevrimdışı arayüzünüzü kendi bağlantı kontrolünüze göre yönetin.

Yalnızca dikey yön kısıtlaması

Bir ekranı dikey yöne kilitlemek için restrictPortraitOnly() metodunu çağırın (protected erişim düzeyindedir ve her iki temel Activity sınıfında da kullanılabilir):

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

Bu metot, sizin yerinize setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT) çağrısını yapar. Ancak Android 8.0'da (API 26) bu çağrı özellikle atlanır; çünkü setRequestedOrientation çağrısının bu işletim sistemi sürümünde yarı saydam veya kayan pencere temalı Activity sınıflarında çökmeye neden olduğu bilinmektedir.

5.4 Kullanıcı izni ve reklamların başlatılması

Kullanıcı iznini aldıktan sonra (örneğin Google'ın UMP/CMP akışı üzerinden), reklam gösterimine izin verildiğini bilmesi için AKS'yi bilgilendirin:

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

5.5 Reklamları kaldırma / IAP ile reklam kontrolü

Uygulamanızda "reklamları kaldır" satın alma seçeneği sunuyorsanız, reklam çağrılarını kendiniz koşula bağlamak yerine bunu AKS üzerinden yönetin. Her yükleme/gösterim çağrısı bu bayrağı zaten dahili olarak kontrol eder:

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