Kotlin Multiplatform satın alma ve Ödeme Duvarları Genel Bakış

0:02:00

RevenueCat'in KMP (Kotlin Multiplatform) SDK Codelab'ına hoş geldiniz!

Bu codelab'de şunları öğreneceksiniz:

Kotlin Multiplatform projesine RevenueCat KMP SDK'yı entegre etme KMP uygulamasında uygulama içi satın alma uygulama Ücretli ve ücretsiz kullanıcıları ayırt etme yöntemini öğrenme Sunucu tabanlı UI yaklaşımına dayalı ödeme duvarı ekranı oluşturma

Bu codelab'ı tamamladığınızda KMP uygulamasında uygulama içi satın almayı başarıyla uygulayabilecek ve RevenueCat'in KMP SDK'sını kullanarak dinamik ödeme duvarını gösterebileceksiniz.

overview

RevenueCat SDK İçe Aktarma

0:04:00

Uygulama içi satın almayı uygulamadan önce, önce mevcut veya yeni projenize RevenueCat SDK'yı eklemeniz gerekir. Başlamak için build.gradle.kts dosyasına aşağıdaki bağımlılığı ekleyin:

GitHub'da en son sürümü kontrol edebilirsiniz.

gradle
[versions]
purchases-kmp = "3.0.0"

[libraries]
purchases-core = { module = "com.revenuecat.purchases:purchases-kmp-core", version.ref = "purchases-kmp" }
purchases-ui = { module = "com.revenuecat.purchases:purchases-kmp-ui", version.ref = "purchases-kmp" }
Gereksinimler (purchases-kmp 3.0.0+): Kotlin 2.3.20+, Android 6.0+ (API 23) ve iOS 13.0+. SDK'nın önceki bir sürümünden yükseltiyorsanız 3.0.0 Geçiş Kılavuzu'na bakın.

Şimdi modülün build.gradle.kts dosyasındaki commonMain kaynak setine bağımlılığı ekleyebilirsiniz.

gradle
kotlin {
    // ...
    sourceSets {
        // ...
        commonMain.dependencies {
            // purchases-kmp bağımlılığını ekleyin.
            implementation(libs.purchases.core)
            implementation(libs.purchases.ui)
        }
    }
}

ExperimentalForeignApi seçim

SDK, native iOS kodu için Kotlin oluşturulmuş bağlamalarını kullandığından iOS kaynak setinde ExperimentalForeignApi'yi seçmeniz gerekir. Bunu etkinleştirmek için modülün build.gradle.kts dosyasına aşağıdaki yapılandırmayı ekleyin:

kotlin
kotlin {
    // ...
    sourceSets {
        // ...
        named { it.lowercase().startsWith("ios") }.configureEach {
            languageSettings {
                optIn("kotlinx.cinterop.ExperimentalForeignApi")
            }
        }
    }
}

iOS kurulumu — CocoaPods gerekmez

purchases-kmp 3.0.0 ile birlikte iOS tarafında SDK entegrasyonu çok daha basit hale geldi. Artık PurchasesHybridCommon (veya PurchasesHybridCommonUI) öğesini CocoaPods bağımlılığı olarak eklemenize gerek yok ve kotlin-cocoapods Gradle plugin'i de gerekmiyor. Native RevenueCat iOS SDK'sı artık doğrudan paylaşılan modülünüzün ürettiği Kotlin Multiplatform framework'üne dahil ediliyor.

Diğer KMP projelerinde olduğu gibi paylaşılan modülünüzden normal bir iOS framework'ü oluşturmanız yeterli. Örneğin composeApp/build.gradle.kts içinde:

kotlin
kotlin {
    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach { iosTarget ->
        iosTarget.binaries.framework {
            baseName = "ComposeApp"
            isStatic = true
        }
    }
    // ...
}
purchases-kmp 2.x veya daha eski bir sürümden mi geçiyorsunuz? Podfile dosyanızdan pod 'PurchasesHybridCommon' / pod 'PurchasesHybridCommonUI' girdilerini, build.gradle.kts dosyanızdan pod("PurchasesHybridCommon") { ... } bloğunu ve sürüm kataloğunuzdan ilgili purchases-common sürümünü kaldırın. Tüm talimatlar için 3.0.0 Geçiş Kılavuzu'na bakın.

RevenueCat SDK'yı başarıyla içe aktardınız. Şimdi başlatma adımına geçelim.

başlatma

0:02:00

Şimdi projede Purchases SDK'yı başlatma zamanı. Project Settings > Platforms'da bulabileceğiniz yalnızca public API anahtarını kullanarak Purchases'ı yapılandırın.

kotlin
import com.revenuecat.purchases.kmp.LogLevel
import com.revenuecat.purchases.kmp.Purchases
import com.revenuecat.purchases.kmp.configure

// Ortak başlatma mantığınız varsa oradan configure()'ı çağırın. Aksi takdirde,
// her platformun uygulama yaşam döngüsü başlangıcında çağırın.
// Not: Her platform için doğru api anahtarını kullanmanız gerekir.
// Bunun için Kotlin Multiplatform'un expect/actual mekanizmasını kullanabilirsiniz.

Purchases.logLevel = LogLevel.DEBUG
Purchases.configure(apiKey = "<google_or_apple_api_key>") {
    appUserId = "<app_user_id>"
    // Diğer yapılandırma seçenekleri.
}

.configure metodunun app_user_id alanı, RevenueCat uygulamasında kullanıcıyı tanımlamak için kullanılır. Özel bir kullanıcı tanımlayıcısı sağlayabilir veya RevenueCat'in otomatik olarak anonim bir ID oluşturmasına izin vermek için atlayabilirsiniz. Daha fazla bilgi için Kullanıcı Tanımlama Kılavuzu'na bakın.

Harika! Bununla uygulamanın %50'sini tamamladınız.

Yetkileri Doğrulama

0:03:00

Şimdi kullanıcı entitlement'ını doğrulama adımına geçelim.

Daha önce belirtildiği gibi, entitlement'lar kullanıcının satın alma sonrasında kilidini açtığı erişim seviyelerini veya özellikleri temsil eder. Bu, reklam banner'ı gösterip göstermeyeceğinizi veya premium erişim verip vermeyeceğinizi belirlemede kullanışlıdır.

Aşağıdaki kod parçasını kullanarak kullanıcının aktif entitlement'a sahip olup olmadığını kolayca kontrol edebilirsiniz:

kotlin
val ENTITLEMENT_IDENTIFIER = ".." // RevenueCat panelinden belirli entitlement tanımlayıcısını alın
val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()
val isEntitled = customerInfo?.entitlements[ENTITLEMENT_IDENTIFIER]?.isActive == true

Kullanıcının belirli bir entitlement'a sahip olup olmadığını kontrol ettikten sonra, uygulamanın iş modeline göre nasıl ilerleyeceğinizi belirleyebilirsiniz.

Örneğin, uygulama reklam destekliyse AdMob banner'ını göstermeyi veya gizlemeyi seçebilirsiniz. Ya da ödeme duvarı veya satın alma diyaloğu göstererek kullanıcının gelişmiş özelliklerin veya içeriğin kilidini açmasını sağlayabilirsiniz.

Bu mantığı uygulamanın bir örneği aşağıdaki gibidir:

kotlin
@Composable
fun ContentScreen(isEntitled: Boolean) {
    if (isEntitled) {
      // Kullanıcı bu entitlement'a erişim yetkisine sahipse. Banner göstermeye gerek yok.
    } else {
      // Burada banner arayüzünü veya ödeme duvarını gösterin
      ..
    }
}

Uygulama İçi Satın Alma Uygulama

0:04:00

Şimdi reklamsız deneyim sunmak için uygulama içi satın almayı uygulayalım. Başlamak için önce RevenueCat panelinden ilgili ürün bilgilerini almanız gerekir. Bu ürün verileri kullanıcıya satın alma seçeneklerini göstermek için kullanılır.

Aşağıdaki örnekte gösterildiği gibi Purchases.sharedInstance.awaitGetProducts()'ı çağırarak mevcut ürünleri alabilirsiniz:

kotlin
// RevenueCat sunucusundan ürün bilgilerini alır
val products = Purchases.sharedInstance.awaitGetProducts(
  productIds = listOf("paywall_tester.subs"),
)

// Uygulama içi satın alma işlemini gerçekleştirir
val purchaseResult = Purchases.sharedInstance.awaitPurchase(
  storeProduct = products.first()
)

paywall_tester.subs:weekly, paywall_tester.subs:monthly, paywall_tester.subs:yearly gibi birden fazla ürün varyasyonu sunuyorsanız, productIds alanının değeri olarak varsayılan ürün tanımlayıcısı olan paywall_tester.subs'ı kullanarak ürün aramasını basitleştirebilirsiniz. Bu şekilde RevenueCat tüm ilgili ürün varyasyonlarını liste olarak getirir, böylece ödeme duvarı UI'ında dinamik olarak gösterebilirsiniz.

Ürün verilerini aldıktan sonra Purchases.sharedInstance.awaitPurchase(product)'ı çağırarak uygulama içi satın alma akışını başlatabilirsiniz. Bu şekilde Google Play satın alma diyaloğu otomatik olarak tetiklenir ve kullanıcı işlemi uygulama içinde tamamlayabilir.

Bu şekilde makbuz, mağaza API'si veya satın alma doğrulamasını manuel olarak işlemenin karmaşıklığı olmadan yalnızca birkaç satır kodla tam işlevli uygulama içi satın alma akışını entegre edebilirsiniz.

Ödeme Duvarı Uygulama

0:07:00

Şimdi Compose Multiplatform kullanarak KMP projesinde ödeme duvarını uygulama zamanı.

İş Mantığı

Başlamak için RevenueCat panelinden şu anki offering'i almanız gerekir. Offering, aylık, yıllık veya ömür boyu planlar gibi kullanıcıya sunulan mevcut satın alma seçeneklerini tanımlar. Aşağıdaki örnekte açıklandığı gibi Purchases.sharedInstance.awaitOfferings() metodunu kullanarak bunu kolayca yapabilirsiniz.

kotlin
internal class DetailsRepositoryImpl : DetailsRepository {

  override fun fetchOffering(): Flow<ApiResponse<Offering>> = flow {
    try {
      val offerings = Purchases.sharedInstance.awaitOfferings()
      offerings.current?.let { currentOffering ->
        val response = ApiResponse.of { currentOffering }
        emit(response)
      }
    } catch (e: PurchasesException) {
      ApiResponse.exception(e)
    }
  }
}

RevenueCat KMP SDK Kotlin coroutine'ler için native destek sağlar, bu da coroutine tabanlı mimari kullanan projeler için mükemmel uyum sağlar. Şu anki offering Flow olarak da sunulur, böylece değişiklikleri reaktif olarak gözlemleyebilir ve UI'ı buna göre güncelleyebilirsiniz.

Compose Multiplatform ile Ödeme Duvarı UI Oluşturma

Bu noktada her şey hazır olmalıdır. com.revenuecat.purchases:purchases-kmp-ui SDK'yı zaten eklediyseniz, Compose Multiplatform kullanarak ödeme duvarı UI'ını kolayca oluşturabilirsiniz.

RevenueCat'in UI kütüphanesi PaywallDialog gibi yerleşik bileşenler sağlar, böylece ödeme duvarı ekranını veya diyaloğunu hızla gösterebilirsiniz. Bu bileşenler tamamen özelleştirilebilir ve uygulamanızın tasarımına uyacak şekilde görünümü ve davranışı ayarlamak için çeşitli yapılandırma seçenekleri sunar.

Compose Multiplatform kullanarak ödeme duvarını uygulamanın ve özelleştirmenin ne kadar basit olduğunu gösteren bir örnek aşağıdaki gibidir:

kotlin
val currentOffering by viewModel.offering.collectAsState()

val options = remember {
    PaywallOptions(dismissRequest = { TODO("Handle dismiss") }) {
        offering = currentOffering
        shouldDisplayDismissButton = true
    }
}

Paywall(options)

Yapılandırma tamamlandı! Artık kullanıcı gerekli entitlement'a sahip olmadığında, Paywall Editor'de yapılandırdığınız tasarımla aynı şekilde ödeme duvarını gösterebilirsiniz.

Codelab: RevenueCat Google Play Entegrasyonu (Ödeme Duvarı Oluşturma)'da gördüğünüz gibi, ödeme duvarı sistemi sunucu tabanlı UI üzerine kuruludur. Bu, uygulama güncellemesi göndermeden veya inceleme sürecinden geçmeden panelden doğrudan ödeme duvarının içeriğini ve tasarımını dinamik olarak güncelleyebileceğiniz anlamına gelir.

Sonuç

Bu codelab'de RevenueCat KMP SDK'yı entegre etmeyi, uygulama içi satın almayı uygulamayı ve Compose Multiplatform'da ödeme duvarı oluşturmayı öğrendiniz. Şimdi uygulamanızı yayınlama ve daha fazla gelir elde etme zamanı!

Aşağıdaki kaynakları kullanarak RevenueCat SDK kullanımı hakkında daha fazla bilgi edinebilirsiniz:

  • Ürün Eğitimleri: RevenueCat'i kullanmaya başlamanıza ve en iyi şekilde yararlanmanıza yardımcı olacak video eğitimleri.