Kotlin Multiplatform satın alma ve Ödeme Duvarları Genel Bakış
0:02:00RevenueCat'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.
RevenueCat SDK İçe Aktarma
0:07:00Uygulama 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.
[versions]
purchases-kmp = "1.8.6+14.0.2"
[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" }Şimdi modülün build.gradle.kts dosyasındaki commonMain kaynak setine bağımlılığı ekleyebilirsiniz.
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 {
// ...
sourceSets {
// ...
named { it.lowercase().startsWith("ios") }.configureEach {
languageSettings {
optIn("kotlinx.cinterop.ExperimentalForeignApi")
}
}
}
}Native iOS SDK'yı Bağlama
SDK, PurchasesHybridCommon adlı native RevenueCat iOS framework'üne bağlı olduğundan mevcut iOS projenize bağlamanız gerekir. Bu codelab'de CocoaPods kullanarak native iOS SDK'yı yapılandıracağız.
Kotlin projesinin tamamını CocoaPods bağımlılığı olarak dahil edebilirsiniz. Bunu yapmak için oluşturulan .podspec dosyasını içeren dizinin adını ve yolunu belirterek projenin Podfile'ındaki bağımlılığı belirtin.
- Sürüm kataloğuna Kotlin CocoaPods Gradle plugin'i ve
purchases-commonsürümünü ekleyin.
gradle/libs.versions.toml dosyasındaki [plugins] bloğuna aşağıdakini ekleyin:
[versions]
# version purchases-kmp sürümündeki '+' işaretinden sonraki her şeyle aynı olmalıdır.
purchases-common = "13.3.0"
[plugins]
kotlin-cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }- Kök
build.gradle.ktsdosyasındaki plugins {} bloğuna aşağıdaki alias'ı ekleyin:
alias(libs.plugins.kotlin.cocoapods) apply false- CocoaPods'u entegre etmek istediğiniz modülde (örn: composeApp)
plugins {}bloğuna aynı alias'ı ekleyin:
alias(libs.plugins.kotlin.cocoapods)- Aşağıdaki gibi cocoapods ortamını yapılandırın:
kotlin {
cocoapods {
// Gerekli özellikler
// Burada gerekli Pod sürümünü belirtin
// Aksi takdirde Gradle proje sürümü kullanılır
version = "1.0"
summary = "Some description for a Kotlin/Native module"
homepage = "Link to a Kotlin/Native module homepage"
// İsteğe bağlı özellik
// Gradle proje adını değiştirmek yerine burada Pod adını yapılandırın
name = "MyCocoaPod"
// .. Diğer Cocoapods seçenekleri burada.
// PurchasesHybridCommon bağımlılığını ekleyin.
pod("PurchasesHybridCommon") {
version = libs.versions.purchases.common.get()
extraOpts += listOf("-compiler-option", "-fmodules")
}
}
}- Son olarak
Podfile'ın iOS uygulama hedefine aşağıdakipost_installbetiğini ekleyin. Örneğin, Kotlin Multiplatform modülünün adısharedise betik aşağıdaki gibidir:
target 'iosApp' do
use_frameworks!
platform :ios, '16.0'
pod 'shared', :path => '../shared', :platforms => :ios
# Aşağıdaki post_install betiğini ekleyin:
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'shared'
target.build_configurations.each do |config|
config.build_settings.delete('ASSETCATALOG_COMPILER_APPICON_NAME')
end
end
end
end
endRevenueCat 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.
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:
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 == trueKullanı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:
@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:
// 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.
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:
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.