Android Uygulama İçi Satın Alma ve Ödeme Duvarları Genel Bakış

0:02:00

RevenueCat Android SDK Codelab'ına hoş geldiniz!

Bu Codelab'da şunları öğreneceksiniz:

Projenize RevenueCat SDK'yı nasıl entegre edeceğinizi Android uygulamanızda uygulama içi satın almayı nasıl uygulayacağınızı Ödeme yapan ve yapmayan kullanıcıları ayırt etme yöntemini Sunucu tabanlı kullanıcı arayüzü yaklaşımıyla ödeme duvarı ekranları oluşturmayı

Bu Codelab'ı tamamladığınızda, RevenueCat'in Android SDK'sını kullanarak Android uygulamanızda uygulama içi satın almaları başarıyla uygulayabilecek ve dinamik ödeme duvarları gösterebileceksiniz.

overview

RevenueCat SDK İçe Aktarma

0:05:00

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

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

Release

gradle
implementation("com.revenuecat.purchases:purchases:9.20.2")

Ödeme duvarları da uygulamayı planlıyorsanız, bunun yerine aşağıdaki bağımlılığı ekleyin:

gradle
implementation("com.revenuecat.purchases:purchases-ui:9.20.2")

Getting Your API Key

Before you can initialize the SDK, you'll need your RevenueCat API key. Here's where to find it:

  1. Go to the RevenueCat dashboard
  2. Navigate to your project
  3. Click on API keys in the left sidebar
  4. Copy your Google Play Store API key (it should start with goog_)
Finding your API key in the RevenueCat dashboard
Important: Keep your API keys secure and never commit them to public repositories. Consider using environment variables or a secure configuration management system for production apps.

Initialize the SDK

Ardından, Application sınıfınızda aşağıdaki kodu kullanarak Purchases SDK'yı başlatın:

kotlin
/**
 * RevenueCat Purchases SDK'yı başlatır.
 *
 * `appUserID` nil ise, Purchases SDK otomatik olarak anonim bir ID oluşturur.
 * Kullanıcı tanımlama hakkında daha fazla bilgi: https://docs.revenuecat.com/docs/user-ids
 *
 * `purchasesAreCompletedBy` REVENUECAT olarak ayarlandığından, Purchases işlemleri otomatik olarak tamamlar.
 * İşlem tamamlama hakkında daha fazla bilgi: https://www.revenuecat.com/docs/migrating-to-revenuecat/sdk-or-not/finishing-transactions
 */
val builder = PurchasesConfiguration.Builder(this, "REVENUECAT_API_KEY")
Purchases.configure(
  builder
    .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT)
    .appUserID(null)
    .diagnosticsEnabled(true)
    .build(),
)

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

Yetkileri Doğrulama

0:03:00

Şimdi kullanıcı yetkilerini nasıl doğrulayacağınızı öğrenelim.

Daha önce bahsedildiği gibi, yetkiler kullanıcının satın alma işleminden sonra kilidini açtığı erişim seviyelerini veya özellikleri temsil eder. Bu, reklam bannerı gösterip göstermeyeceğinizi veya premium erişim sağlayıp sağlamayacağınızı belirlemenize olanak tanır.

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

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

Kullanıcının belirli bir yetkiye sahip olup olmadığını doğruladıktan sonra, uygulamanızın iş modeline göre nasıl ilerleyeceğinize karar verebilirsiniz.

Örneğin, uygulamanız reklam destekliyse AdMob bannerını gösterebilir veya gizleyebilirsiniz. Alternatif olarak, kullanıcının premium özelliklerin veya içeriğin kilidini açması için bir ödeme duvarı veya satın alma diyaloğu gösterebilirsiniz.

İşte bu mantığı uygulamanın bir örneği:

kotlin
@Composable
fun ContentScreen(isEntitled: Boolean) {
    if (isEntitled) {
      // Kullanıcının bu yetkiye erişimi varsa 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 bir deneyim sağlamak 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ılara satın alma seçenekleri sunmak için kullanılacaktı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(
  purchaseParams = PurchaseParams.Builder(
    activity = context as Activity,
    storeProduct = products.first(),
  ).build()
)

paywall_tester.subs:weekly, paywall_tester.subs:monthly, paywall_tester.subs:yearly gibi birden fazla ürün varyasyonu sunuyorsanız, productIds alanında temel ürün tanımlayıcısı olan paywall_tester.subs'yi kullanarak ürün aramayı basitleştirebilirsiniz. Bu şekilde RevenueCat, tüm ilgili ürün varyasyonlarını bir liste olarak alır ve ödeme duvarı arayüzünde 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 otomatik olarak Google Play ödeme diyaloğunu tetikler ve kullanıcının uygulama içinde işlemi tamamlamasını sağlar.

Bununla sadece birkaç satır kodla tam işlevli bir uygulama içi satın alma akışını entegre ettiniz. Makbuzları, mağaza API'lerini veya satın alma doğrulamasını manuel olarak yönetmenin karmaşıklığıyla uğraşmanıza gerek yok.

Ödeme Duvarı Uygulama

0:07:00

Şimdi Jetpack Compose kullanarak Android projenizde ödeme duvarı uygulamanın zamanı geldi.

İş Mantığı

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

kotlin
internal class DetailsRepositoryImpl @Inject constructor(
  @Dispatcher(CatArticlesDispatchers.IO) private val ioDispatcher: CoroutineDispatcher,
) : 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)
    }
  }.flowOn(ioDispatcher)
}

RevenueCat Android SDK, Kotlin coroutine'lerini yerel olarak destekler, bu da onu coroutine tabanlı mimariler kullanan projeler için mükemmel bir seçim yapar. Mevcut Teklif ayrıca Flow olarak da sunulur, böylece değişiklikleri reaktif olarak gözlemleyebilir ve arayüzü uygun şekilde güncelleyebilirsiniz.

Jetpack Compose ile Ödeme Duvarı Arayüzü Uygulama

Bu noktada her şey hazır. com.revenuecat.purchases:purchases-ui SDK'yı zaten eklediyseniz, Jetpack Compose kullanarak ödeme duvarı arayüzünü kolayca oluşturabilirsiniz.

RevenueCat'in UI kütüphanesi, PaywallDialog gibi yerleşik bileşenler sağlar ve ödeme duvarı ekranlarını veya diyaloglarını hızlıca göstermenizi sağlar. Bu bileşenler tamamen özelleştirilebilir ve görünümü ve davranışı uygulamanızın tasarımına uyacak şekilde ayarlamanıza olanak tanıyan çeşitli yapılandırma seçenekleri sunar.

İşte Jetpack Compose kullanarak ödeme duvarı uygulamanın ve özelleştirmenin ne kadar basit olduğunu gösteren bir örnek:

kotlin
val offering by viewModel.offering.collectAsState()

PaywallDialog(
   PaywallDialogOptions.Builder()
       .setDismissRequest {  }
       .setOffering(offering)
       .setFontProvider(..)
       .setListener(object : PaywallListener {
           override fun onPurchaseStarted(rcPackage: Package) {
               super.onPurchaseStarted(rcPackage)
           }

           override fun onPurchaseCompleted(customerInfo: CustomerInfo, storeTransaction: StoreTransaction) {
               super.onPurchaseCompleted(customerInfo, storeTransaction)

               customer = customerInfo
           }

           override fun onPurchaseError(error: PurchasesError) {
               super.onPurchaseError(error)
           }

           override fun onPurchaseCancelled() {
               super.onPurchaseCancelled()
           }
       })
       .build()
)

Kurulum tamamlandı! Artık kullanıcı gerekli yetkiye sahip olmadığında, Ödeme Duvarı Düzenleyicisi'nde yapılandırdığınız tasarımla aynı şekilde ödeme duvarını gösterebilirsiniz.

Codelab: RevenueCat Google Play Entegrasyonu (Ödeme Duvarı Oluşturma)'nda zaten gördüğünüz gibi, ödeme duvarı sistemi sunucu tabanlı kullanıcı arayüzü ile oluşturulmuştur. 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.

Son

Bu Codelab'da RevenueCat'in Android SDK'sını entegre etmeyi, uygulama içi satın alma uygulamayı ve Jetpack Compose'da ödeme duvarları oluşturmayı öğrendiniz. Artık uygulamanızı yayınlama ve daha fazla gelir elde etme zamanı!

Aşağıdaki kaynakları kullanarak Android projenizde Jetpack Compose ile RevenueCat SDK kullanımı hakkında daha fazla bilgi edinebilirsiniz: