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:
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 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() çağrısını yapar. Bunların hiçbirini kendiniz çağırmanız gerekmez.
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 yalnızca kolaylık sağlayan bir sarmalayıcıdır. Uygulamanızın vazgeçemeyeceğiniz kendi Application temel sınıfı zaten varsa, sarmalayıcının dahili olarak çağırdığı aynı AppsKitSDK metotlarını doğrudan kendi Application.onCreate() metodunuzdan çağırabilirsiniz:
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 içinden otomatik tetiklenen requestSplashAppOpenAd/showAppOpenAd). Bunlar doğrudan AppsKitSDKApplication sınıfının örnek metotlarıdır ve AppsKitSDK nesnesi üzerinden sunulmaz. Yine de soğuk başlatmada bir uygulama açılış reklamı göstermek istiyorsanız, kendi başlangıç akışınızda istediğiniz noktada AdsManager.loadAppOpen/AdsManager.showAppOpen çağrılarını kendiniz yapın (bkz. §6).
5.3 Activity'ler
AppsKitSDKBaseActivity (AppCompatActivity tabanlı ekranlar için) veya AppsKitSDKBaseComponentActivity (yalın ComponentActivity kullanan ya da yalnızca Compose içeren ekranlar için) sınıfından türetin:
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/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'ın kendi onResume/onPause çağrıları burada değil, Application düzeyinde iletilir; bkz. §5.2.)
İnternet bağlantısı iletişim kutusu
Her iki temel Activity sınıfı da onResume() içinde bağlantı durumunu izler ve varsayılan olarak bağlantı kesildiğinde kullanıcı etkileşimini engelleyen bir "internet bağlantısı yok" iletişim kutusu gösterir. Bağlantı yeniden sağlandığında bu kutu otomatik olarak kapanır. Siz kapatmadıkça bu özellik her ekranda etkindir:
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ısını yaptığınızda AKS,onInternetConnectivityChangemetodunu çağırmaya devam eder ancak gerçek bağlantı durumundan bağımsız olarak her zamantrueiletir. Bağlantı yönetimini devre dışı bıraktığınızda gerçek bağlantı durumunu izlemez. Burada doğru bağlantı durumuna ihtiyacınız varsa kendi ç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() çağrısını yapın (protected erişim düzeyindedir ve her iki temel Activity sınıfında da kullanılabilir):
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ı bilinçli olarak atlanır; çünkü setRequestedOrientation çağrısının, bu işletim sistemi sürümünde yarı saydam veya yüzen pencere temalı Activity'lerde çökmeye neden olduğu bilinmektedir.
5.4 Kullanıcı rızası ve reklamların başlatılması
Kullanıcı rızasını aldıktan sonra (örneğin Google'ın UMP/CMP akışı aracılığıyla), reklamların gösterilebileceğini AKS'ye bildirin:
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 bu işlemi AKS üzerinden yönetin. Her yükleme/gösterme çağrısı bu bayrağı zaten dahili olarak kontrol eder:
AppsKitSDK.setRemoveAdsStatus(true) // call after a successful purchase/restore
AppsKitSDK.getRemoveAdsStatus() // check current status