Adapty Kotlin Multiplatform SDK'yı yükleyin ve yapılandırın
Adapty SDK, mobil uygulamanıza sorunsuz entegrasyon için iki temel modül içerir:
- Temel Adapty: Adapty’nin uygulamanızda düzgün çalışması için zorunlu olan SDK.
- AdaptyUI (
io.adapty:adapty-kmp-ui): Compose Multiplatform render katmanını (view.present()) kullanarak Adapty Paywall Builder kullanıyorsanız bu modül gereklidir. Projeniz Compose Multiplatform kullanmıyorsa bunun yerine temel modüldekicreateNativePaywallViewvecreateNativeOnboardingViewkullanabilirsiniz.
Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Paywall gösterme, satın alma yapma ve diğer temel işlevleri içeren tam kurulumu gösteren örnek uygulamamıza göz atın.
Tam uygulama adımları için videoyu da izleyebilirsiniz:
Gereksinimler
Adapty Kotlin Multiplatform SDK, Xcode 16.2 ve sonraki sürümlerle uyumludur.
Adapty, Google Play Billing Library 8.x sürümüne kadar uyumludur. Adapty varsayılan olarak Google Play Billing Library v.7.0.0 ile çalışır; ancak daha yeni bir sürüm kullanmak istiyorsanız bağımlılığı manuel olarak ekleyebilirsiniz.
SDK’yı yüklemek, Adapty kurulumunun 5. adımıdır. Uygulamanızda satın almalar çalışmadan önce uygulamanızı mağazalara bağlamanız, ardından Adapty Kontrol Paneli’nde ürünler, bir paywall ve bir placement oluşturmanız gerekir. Hızlı başlangıç kılavuzu tüm gerekli adımları anlatmaktadır.
Adapty SDK’yı Gradle ile yükleyin
Gradle ile Adapty SDK kurulumu hem Android hem de iOS uygulamaları için gereklidir.
Bağımlılık kurulum yöntemini seçin:
- Standart Gradle: Bağımlılıkları modül düzeyindeki
build.gradledosyanıza ekleyin - Projeniz
.gradle.ktsdosyaları kullanıyorsa bağımlılıkları modül düzeyindekibuild.gradle.ktsdosyanıza ekleyin - Sürüm katalogları kullanıyorsanız bağımlılıkları
libs.versions.tomldosyanıza ekleyin ve ardındanbuild.gradle.ktsiçinde başvurun
Maven ile ilgili bir hata alırsanız Gradle betiklerinizde mavenCentral() bulunduğundan emin olun.
Nasıl ekleyeceğinize dair talimat
Projenizde settings.gradle içinde dependencyResolutionManagement yoksa, üst düzey build.gradle dosyanızın repositories bölümünün sonuna aşağıdakini ekleyin:
allprojects {
repositories {
...
mavenCentral()
}
}Aksi hâlde settings.gradle dosyanızdaki dependencyResolutionManagement bölümünün repositories kısmına aşağıdakini ekleyin:
dependencyResolutionManagement {
...
repositories {
...
google()
mavenCentral()
}
}Adapty SDK’yı etkinleştirin
Temel kurulum
Başlatmayı mümkün olduğunca erken ekleyin; genellikle her iki platform için de ortak Kotlin kodunuzda yapılır.
Adapty SDK, uygulamanızda yalnızca bir kez etkinleştirilmesi gerekir.
import com.adapty.kmp.Adapty
import com.adapty.kmp.models.AdaptyConfig
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.build()
Adapty.activate(configuration = config)
.onSuccess {
Log.d("Adapty", "SDK initialised")
}
.onError { error ->
Log.e("Adapty", "Adapty init error: ${error.message}")
}
Public SDK Key’inizi almak için:
- Adapty Kontrol Paneli’ne gidin ve Uygulama ayarları → Genel sayfasına geçin.
- Api keys bölümünden Public SDK Key’i kopyalayın (Secret Key’i değil).
- Koddaki
"YOUR_PUBLIC_SDK_KEY"kısmını değiştirin.
- Adapty başlatma için Public SDK anahtarını kullandığınızdan emin olun; Secret key yalnızca sunucu tarafı API için kullanılmalıdır.
- SDK anahtarları her uygulama için benzersizdir; birden fazla uygulamanız varsa doğru olanı seçtiğinizden emin olun.
Şimdi uygulamanızdaki paywallları ayarlayın:
- Adapty Paywall Builder kullanıyorsanız önce aşağıdaki AdaptyUI modülünü etkinleştirin, ardından Paywall Builder hızlı başlangıç kılavuzunu izleyin.
- Kendi paywall arayüzünüzü oluşturuyorsanız özel paywalllar için hızlı başlangıç kılavuzuna bakın.
Adapty SDK’nın AdaptyUI modülünü etkinleştirin
Adapty Paywall Builder kullanmak için AdaptyUI modülünü etkinleştirmeyi planlıyorsanız yapılandırmanıza .withActivateUI(true) eklediğinizden emin olun.
important Kodunuzda AdaptyUI’yi etkinleştirmeden önce temel Adapty modülünü etkinleştirmeniz gerekir.
import com.adapty.kmp.Adapty
import com.adapty.kmp.models.AdaptyConfig
import com.adapty.kmp.models.AdaptyLogLevel
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withActivateUI(true) // true for activating the AdaptyUI module
.build()
Adapty.activate(configuration = config)
.onSuccess {
Log.d("Adapty", "SDK initialised")
}
.onError { error ->
Log.e("Adapty", "Adapty init error: ${error.message}")
}
Proguard’ı yapılandırın (Android)
Uygulamanızı production’a almadan önce Proguard yapılandırmanıza -keep class com.adapty.** { *; } eklemeniz gerekebilir.
İsteğe bağlı kurulum
Loglama
Loglama sistemini ayarlayın
Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri loglar. Kullanılabilecek log seviyeleri şunlardır:
| Seviye | Açıklama |
|---|---|
AdaptyLogLevel.NONE | Hiçbir şey loglanmaz. Varsayılan değer |
AdaptyLogLevel.ERROR | Yalnızca hatalar loglanır |
AdaptyLogLevel.WARN | Kritik hatalara yol açmayan ancak dikkat edilmesi gereken hatalar ve SDK mesajları loglanır. |
AdaptyLogLevel.INFO | Hatalar, uyarılar ve çeşitli bilgi mesajları loglanır. |
AdaptyLogLevel.VERBOSE | Fonksiyon çağrıları, API sorguları gibi hata ayıklamada yararlı olabilecek ek bilgiler de dahil her şey loglanır. |
Adapty’yi yapılandırmadan önce uygulamanızda log seviyesini ayarlayabilirsiniz:
import com.adapty.kmp.models.AdaptyConfig
import com.adapty.kmp.models.AdaptyLogLevel
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withLogLevel(AdaptyLogLevel.VERBOSE) // recommended for development
.build()
Veri politikaları
IP adresi toplama ve paylaşımını devre dışı bırakın
Adapty modülünü etkinleştirirken kullanıcı IP adresinin toplanmasını ve paylaşılmasını devre dışı bırakmak için ipAddressCollectionDisabled değerini true olarak ayarlayın. Varsayılan değer false’tur.
Kullanıcı gizliliğini artırmak, bölgesel veri koruma yönetmeliklerine (GDPR veya CCPA gibi) uymak ya da IP tabanlı özellikler uygulamanız için gerekli olmadığında gereksiz veri toplamayı azaltmak için bu parametreyi kullanın.
import com.adapty.kmp.models.AdaptyConfig
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withIpAddressCollectionDisabled(true)
.build()
Reklam kimliği toplama ve paylaşımını devre dışı bırakın
Adapty modülünü etkinleştirirken reklam tanımlayıcılarının toplanmasını devre dışı bırakmak için appleIdfaCollectionDisabled (iOS) veya googleAdvertisingIdCollectionDisabled (Android) değerini true olarak ayarlayın. Varsayılan değer false’tur.
App Store/Play Store politikalarına uymak, Uygulama İzleme Şeffaflığı istemini tetiklemekten kaçınmak ya da uygulamanızın reklam attribution veya reklam kimliklerine dayalı analitik gerektirmediği durumlarda bu parametreyi kullanın.
import com.adapty.kmp.models.AdaptyConfig
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withGoogleAdvertisingIdCollectionDisabled(true) // Android only
.withAppleIdfaCollectionDisabled(true) // iOS only
.build()
AdaptyUI için medya önbelleği yapılandırmasını ayarlayın
AdaptyUI, performansı artırmak ve ağ kullanımını azaltmak için medyayı (görüntü ve video gibi) varsayılan olarak önbelleğe alır. Özel bir yapılandırma sağlayarak önbellek ayarlarını özelleştirebilirsiniz.
Varsayılan önbellek ayarlarını değiştirmek için mediaCache kullanın:
import com.adapty.kmp.models.AdaptyConfig
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withMediaCacheConfiguration(
AdaptyConfig.MediaCacheConfiguration(
memoryStorageTotalCostLimit = 200 * 1024 * 1024, // 200 MB
memoryStorageCountLimit = Int.MAX_VALUE,
diskStorageSizeLimit = 200 * 1024 * 1024 // 200 MB
)
)
.build()
Yerel access level’ları etkinleştirin (Android)
Varsayılan olarak yerel access level’lar Android için devre dışıdır. Etkinleştirmek için withLocalAccessLevelAllowed değerini true olarak ayarlayın:
import com.adapty.kmp.models.AdaptyConfig
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withGoogleLocalAccessLevelAllowed(true)
.build()
Yedekten geri yüklemede verileri temizleyin
withAppleClearDataOnBackup değeri true olarak ayarlandığında SDK, uygulama iCloud yedeğinden geri yüklendiğinde bunu algılar ve önbelleğe alınan profil bilgileri, ürün detayları ve paywalllar dahil tüm yerel SDK verilerini siler. SDK ardından temiz bir durumla başlatılır. Varsayılan değer false’tur.
Yalnızca yerel SDK önbelleği silinir. Apple ile işlem geçmişi ve Adapty sunucularındaki kullanıcı verileri değişmez.
import com.adapty.kmp.models.AdaptyConfig
val config = AdaptyConfig
.Builder("PUBLIC_SDK_KEY")
.withAppleClearDataOnBackup(true)
.build()
Sorun giderme
Android yedekleme kuralları (Otomatik Yedekleme yapılandırması)
Bazı SDK’lar (Adapty dahil) kendi Android Auto Backup yapılandırmasını içerir. Yedekleme kurallarını tanımlayan birden fazla SDK kullanıyorsanız, Android manifest birleştirme işlemi android:fullBackupContent, android:dataExtractionRules veya android:allowBackup ile ilgili bir hatayla başarısız olabilir.
Tipik hata belirtileri: Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)
Bu değişiklikler Android platform dizininizde yapılmalıdır (genellikle projenizin android/ klasöründe bulunur).
Sorunu çözmek için şunları yapmanız gerekir:
-
Manifest birleştirme işlemine, yedeklemeyle ilgili özellikler için uygulamanızın değerlerini kullanmasını söyleyin.
-
Adapty’nin kurallarını diğer SDK’ların kurallarıyla birleştiren yedekleme kuralı dosyaları oluşturun.
1. Manifestinize tools ad alanını ekleyin
AndroidManifest.xml dosyanızda, kök <manifest> etiketinin tools içerdiğinden emin olun:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
...
</manifest>
2. <application> içinde yedekleme özelliklerini geçersiz kılın
Aynı AndroidManifest.xml dosyasında, <application> etiketini güncelleyerek uygulamanızın nihai değerleri sağlamasını ve manifest birleştirme işlemine kütüphane değerlerini değiştirmesini söyleyin:
<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">
...
</application>
Herhangi bir SDK de android:allowBackup ayarlıyorsa, bunu tools:replace içine ekleyin:
tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"
3. Birleştirilmiş yedekleme kuralı dosyaları oluşturun
Android projenizin res/xml/ dizininde, Adapty’nin kurallarını diğer SDK’ların kurallarıyla birleştiren XML dosyaları oluşturun. Android, işletim sistemi sürümüne bağlı olarak farklı yedekleme kuralı formatları kullandığından, her iki dosyayı da oluşturmak uygulamanızın desteklediği tüm Android sürümleriyle uyumluluk sağlar.
Aşağıdaki örneklerde örnek bir üçüncü taraf SDK olarak AppsFlyer kullanılmaktadır. Uygulamanızda kullandığınız diğer SDK’lar için kuralları değiştirin veya ekleyin.
Android 12 ve üzeri için (yeni veri çıkarma kuralları formatını kullanır):
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="appsflyer-purchase-data"/>
<exclude domain="database" path="afpurchases.db"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="appsflyer-purchase-data"/>
<exclude domain="database" path="afpurchases.db"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</device-transfer>
</data-extraction-rules>
Android 11 ve altı için (eski tam yedekleme içeriği formatını kullanır):
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="appsflyer-data"/>
<exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
Kotlin Multiplatform projesinde bu değişiklikleri APK/AAB üreten Android uygulama modülüne (örneğin androidApp veya app) uygulayın:
- Manifest:
androidApp/src/main/AndroidManifest.xml - Yedekleme kuralları XML:
androidApp/src/main/res/xml/
Android’de başka bir uygulamadan döndükten sonra satın almalar başarısız oluyor
Satın alma akışını başlatan Activity varsayılan olmayan bir launchMode kullanıyorsa Android, kullanıcı Google Play’den, bir bankacılık uygulamasından veya tarayıcıdan geri döndüğünde bu Activity’yi yanlış şekilde yeniden oluşturabilir veya yeniden kullanabilir. Bu durum satın alma sonucunun kaybolmasına ya da iptal edilmiş olarak değerlendirilmesine neden olabilir.
Satın almaların doğru çalışmasını sağlamak için satın alma akışını başlatan Activity’de yalnızca standard veya singleTop başlatma modlarını kullanın; diğer modlardan kaçının.
AndroidManifest.xml dosyanızda satın alma akışını başlatan Activity’nin standard veya singleTop olarak ayarlandığından emin olun:
<activity
android:name=".MainActivity"
android:launchMode="standard" />