Adapty Kotlin Multiplatform SDK'sini Yükleyin ve Yapılandırın

Adapty SDK, mobil uygulamanıza sorunsuz entegrasyon için iki temel modül içerir:

  • Core Adapty: Bu temel SDK, Adapty’nin uygulamanızda düzgün çalışması için zorunludur.
  • AdaptyUI (io.adapty:adapty-kmp-ui): Bu modül, Compose Multiplatform render katmanıyla (view.present()) Adapty Paywall Builder kullanıyorsanız gereklidir. Projeniz Compose Multiplatform kullanmıyorsa, bunun yerine core modülündeki createNativePaywallView ve createNativeOnboardingView fonksiyonlarını kullanabilirsiniz.

Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall göstermeyi, satın alma yapmayı ve diğer temel işlevleri içeren örnek uygulamamıza göz atın.

Tam bir uygulama adım adım açıklaması 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 Kurun

Adapty SDK’nın Gradle ile 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.gradle dosyanıza ekleyin
  • Projeniz .gradle.kts dosyaları kullanıyorsa, bağımlılıkları modül düzeyindeki build.gradle.kts dosyanıza ekleyin
  • Sürüm katalogları kullanıyorsanız, bağımlılıkları libs.versions.toml dosyanıza ekleyin ve ardından build.gradle.kts içinde referans verin

Maven ile ilgili bir hata alırsanız, Gradle betiklerinizde mavenCentral() ifadesinin bulunduğundan emin olun.

Nasıl ekleneceğine dair talimat Eğer projenizin settings.gradle dosyasında dependencyResolutionManagement yoksa, en üst seviyedeki build.gradle dosyanıza repositories bölümünün sonuna şunu ekleyin:

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

Aksi takdirde, settings.gradle dosyanızdaki dependencyResolutionManagement bölümünün repositories kısmına şunu ekleyin:

dependencyResolutionManagement {
    ...
    repositories {
        ...
        google()
        mavenCentral()
    }
}

Adapty SDK’yı etkinleştirin

Temel kurulum

Başlatmayı mümkün olduğunca erken bir noktaya ekleyin; genellikle her iki platform için de paylaşılan Kotlin kodunuza eklenmelidir.

Adapty SDK’nın uygulamanızda yalnızca bir kez etkinleştirilmesi gerekir.


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

Diğer Adapty SDK metotlarını çağırmadan önce activate tamamlanana kadar bekleyin. Tam sıra için Kotlin Multiplatform SDK’da çağrı sırası bölümüne bakın.

Public SDK Key’inizi almak için:

  1. Adapty Kontrol Paneli’ne gidin ve App settings → General sayfasına gidin.
  2. Api keys bölümünden Public SDK Key’i kopyalayın (Secret Key’i değil).
  3. Koddaki "YOUR_PUBLIC_SDK_KEY" ifadesini değiştirin.
  • Adapty başlatma işlemi için Public SDK anahtarını kullandığınızdan emin olun; Secret anahtar yalnızca sunucu taraflı 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ızda paywallları ayarlayın:

AdaptyUI modülünü etkinleştirme

Adapty Paywall Builder’ı kullanmak amacıyla AdaptyUI modülünü etkinleştirmeyi planlıyorsanız, yapılandırmanızda .withActivateUI(true) ayarını yapmayı unutmayın.

önemli Kodunuzda, AdaptyUI’yi etkinleştirmeden önce önce temel Adapty modülünü etkinleştirmeniz gerekir.


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

Günlükleme

Günlükleme sistemini yapılandırma

Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri günlüğe kaydeder. Aşağıdaki seviyeler mevcuttur:

SeviyeAçıklama
AdaptyLogLevel.NONEHiçbir şey loglanmaz. Varsayılan değer
AdaptyLogLevel.ERRORYalnızca hatalar loglanır
AdaptyLogLevel.WARNHatalar ve SDK’dan gelen kritik hata oluşturmayan ancak dikkat edilmesi gereken mesajlar loglanır.
AdaptyLogLevel.INFOHatalar, uyarılar ve çeşitli bilgi mesajları loglanır.
AdaptyLogLevel.VERBOSEHata ayıklama sırasında işe yarayabilecek her türlü ek bilgi (fonksiyon çağrıları, API sorguları vb.) loglanır.
Adapty’yi yapılandırmadan önce uygulamanızda log seviyesini ayarlayabilirsiniz:

val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withLogLevel(AdaptyLogLevel.VERBOSE) // recommended for development
     .build()   

Veri politikaları

IP adresi toplama ve paylaşmayı devre dışı bırakma

Adapty modülünü etkinleştirirken, kullanıcı IP adresi toplama ve paylaşımını devre dışı bırakmak için ipAddressCollectionDisabled değerini true olarak ayarlayın. Varsayılan değer false’tur.

Bu parametreyi kullanıcı gizliliğini artırmak, bölgesel veri koruma düzenlemelerine (GDPR veya CCPA gibi) uymak ya da uygulamanız için IP tabanlı özellikler gerekmediğinde gereksiz veri toplamayı azaltmak amacıyla kullanabilirsiniz.


val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withIpAddressCollectionDisabled(true)  
     .build()  

Reklam kimliği toplama ve paylaşımını devre dışı bırakma

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, App Tracking Transparency isteğini tetiklemekten kaçınmak veya uygulamanız reklam kimliklerine dayalı attribution ya da analitik gerektirmiyorsa bu parametreyi kullanın.


val config = AdaptyConfig
     .Builder("PUBLIC_SDK_KEY")
     .withGoogleAdvertisingIdCollectionDisabled(true)        // Android only
     .withAppleIdfaCollectionDisabled(true)                  // iOS only
     .build()  

AdaptyUI için medya önbellek yapılandırmasını ayarlama

Varsayılan olarak AdaptyUI, performansı artırmak ve ağ kullanımını azaltmak için medyayı (resimler ve videolar gibi) önbelleğe alır. Önbellek ayarlarını özel bir yapılandırma sağlayarak özelleştirebilirsiniz.

Varsayılan önbellek ayarlarını geçersiz kılmak için mediaCache kullanın:


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:


val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withGoogleLocalAccessLevelAllowed(true)
    .build()

Yedekten geri yüklemede verileri temizleme

withAppleClearDataOnBackup true olarak ayarlandığında, SDK uygulamanın iCloud yedeğinden geri yüklendiğini algılar ve önbelleğe alınmış profil bilgileri, ürün ayrıntıları ve paywalllar dahil olmak üzere yerel olarak depolanan tüm 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 olan işlem geçmişi ve Adapty sunucularındaki kullanıcı verileri değişmeden kalır.


val config = AdaptyConfig
    .Builder("PUBLIC_SDK_KEY")
    .withAppleClearDataOnBackup(true)
    .build()

Sorun Giderme

Android yedekleme kuralları (Auto Backup 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 Android uygulama modülünde (APK/AAB üreten modül) yapın, örneğin androidApp veya app:

  • 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 standart olmayan bir launchMode kullanıyorsa, kullanıcı Google Play’den, bir bankacılık uygulamasından veya tarayıcıdan geri döndüğünde Android bu Activity’yi yanlış şekilde yeniden oluşturabilir veya yeniden kullanabilir. Bu durum, satın alma sonucunun kaybolmasına ya da iptal edilmiş gibi değerlendirilmesine yol açabilir.

Satın almaların düzgün çalışmasını sağlamak için, satın alma akışını başlatan Activity’de yalnızca standard veya singleTop launch mode 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" />