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

0:02:00

RevenueCat'ın iOS SDK Codelab'ına hoş geldiniz!

Bu Codelab'da aşağıdaki konuları öğreneceksiniz:

RevenueCat SDK'ı Xcode projenize entegre edin. SwiftUI uygulamasında uygulama içi satın alma'ı uygular. ücretli ve ücretsiz kullanıcıları ayırt etmedk öğrenirsiniz. RevenueCat'ın sunucu tarafı yapılandırmasını kullanarak SwiftUI ile ödeme duvarı ekranı'ı oluşturur.

Bu Codelab'ı tamamladığınızda, RevenueCat'in iOS SDK'sı ve SwiftUI kullanarak iOS 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

Öncelikle, uygulama içi satın almayı uygulamadan önce RevenueCat SDK'yı projenize içe aktarmanız gerekir. En kolay yol Swift Package Manager kullanmaktır.

Xcode'de Podfile'e aşağıdakini ekleyin:

text
pod 'RevenueCat'
pod 'RevenueCatUI'

Xcode paketleri alır. RevenueCat'ı uygulamanızın ana hedefine eklediğinizden emin olun.

Önceden oluşturulmuş Ödeme Duvarı uygulamayı planlıyorsanız RevenueCatUI kütüphanesini de aynı anda ekleyebilirsiniz.

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 Apple App Store API key (it should start with appl_)
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, aşağıdaki kodu kullanarak uygulamanızın init() metodu veya AppDelegate'de Purchases SDK'yı başlatın:

swift
import SwiftUI
import RevenueCat

@main
struct MyApp: App {
    init() {
        // SDK'ın tüm mesaj günlüklerini yazdırır
        Purchases.logLevel = .debug

        // API  anahtarıyla SDK yapılandırması
        Purchases.configure(withAPIKey: <public_apple_api_key>, appUserID: <app_user_id>)
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Kullanıcı tanımlama: belirli appUserID sağlamadığımız için RevenueCat otomatik olarak anonim bir ID oluşturur ve yönetir. Geri yükleme özelliğinin düzgün çalışması için backend'inizden sağlanan benzersiz bir tanımlayıcı kullanın. İşlem tamamlama: Varsayılan olarak SDK, App Store ile işlem tamamlamayı otomatik olarak yönetir, bu yüzden manuel olarak yapmanıza gerek yoktur.

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

Yetkileri Doğrulama

0:03:00

Şimdi kullanıcı yetki doğrulamasına geçelim.

Entitlement 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 yardımcı olur.

Swift'ın en son async/await sözdizimini kullanarak kullanıcının aktif bir yetkiye sahip olup olmadığını kolayca kontrol edebilirsiniz:

swift
import SwiftUI
import RevenueCat

struct ContentView: View {
    @State private var isSubscribed: Bool = false

    let ENTITLEMENT_ID = "premium" // RevenueCat Panelden yetki tanımlayıcısı

    var body: some View {
        VStack {
            if isSubscribed {
                PremiumContent()
            } else {
                Text("Ücretsiz içeriktir.")
                // Burada banner veya ödeme duvarı gösterebilirsiniz
            }
        }
        .task {
            // Görünüm göründüğünde yetki kontrolü
            await checkEntitlement()
        }
    }

    private func checkEntitlement() async {
        do {
            let customerInfo = try await Purchases.shared.customerInfo()
            // Entitlement aktif mi kontrol et
            if customerInfo.entitlements[ENTITLEMENT_ID]?.isActive == true {
                self.isSubscribed = true
            } else {
                self.isSubscribed = false
            }
        } catch {
            print("Müşteri bilgisi alma hatası: \(error)")
        }
    }
}

Kullanıcının belirli bir yetkiye sahip olup olmadığını doğruladıktan sonra nasıl ilerleyeceğinize karar verebilirsiniz. Bu SwiftUI örneğinde @State değişken(isSubscribed)'yi güncelleyerek görünümün otomatik olarak yeniden render edilmesini ve premium içerik veya ücretsiz sürümü göstermesini sağlar.

Uygulama İçi Satın Alma Uygulama

0:04:00

Şimdi premium bir deneyim sağlamak için uygulama içi satın almayı uygulayalım. Başlamak için önce RevenueCat'te yapılandırdığınız ürünleri almanız gerekir. Bu veriler, kullanıcılara satın alma seçenekleri göstermek için kullanılacaktır.

Purchases.shared.products(productIdentifiers:) çağırarak mevcut ürünleri alabilirsiniz:

swift
import RevenueCat

class PurchaseViewModel: ObservableObject {
    func purchase(product: StoreProduct) async {
        do {
            let result = try await Purchases.shared.purchase(product: product)

            // Kullanıcının artık premium yetkisi olup olmadığını kontrol et
            if result.customerInfo.entitlements["premium"]?.isActive == true {
                // Premium içeriğin kilidini aç
                print("Satın alma başarılı!")
            }
        } catch {
            print("Satın alma hatası: \(error)")
        }
    }

    func fetchProducts() async -> [StoreProduct] {
        do {
            //  tanımlayıcısını kullanarak ürün alma
            let products = try await Purchases.shared.products(["premium_monthly", "premium_yearly"])
            return products
        } catch {
            print("Ürün alma hatası: \(error)")
            return []
        }
    }
}

StoreProduct nesnesini aldıktan sonra Purchases.shared.purchase(product:)'ı çağırarak uygulama içi satın alma akışı'yı başlatabilirsiniz. Bu şekilde Yerel App Store satın alma sayfası otomatik olarak tetiklenir ve kullanıcının uygulama içinde güvenli bir şekilde işlemi tamamlamasını sağlar.

Bu şekilde sadece birkaç satır kodla tam işlevli uygulama içi satın alma akışı'ı entegre ettiniz. Makbuz işleme, StoreKit API veya satın alma doğrulamasını manuel olarak yönetmenin karmaşıklığına gerek yok.

Ödeme Duvarı (Paywall) Uygulama

0:07:00

Şimdi SwiftUI kullanarak iOS projenizde Ödeme Duvarı uygulamanın zamanı geldi.

İş Mantığı

Başlamak için RevenueCat panelinden mevcut Teklifi almanız gerekiyor . Teklifler, ödeme duvarında kullanıcılara gösterilen mevcut paketleri (aylık, yıllık vb.) tanımlar. Purchases.shared.offerings() kullanarak bunu kolayca yapabilirsiniz:

swift
import Foundation
import RevenueCat
import SwiftUI

@MainActor // @Published Özellik değişikliğinin ana iş parçacığında gerçekleşmesini sağlar
class PaywallViewModel: ObservableObject {

    // Ödeme duvarında gösterilecek mevcut Teklifi tutar.
    @Published var offering: Offering?

    // UI'de gösterge görüntülemek için yükleme durumunu takip eder.
    @Published var isLoading: Bool = false

    init() {
        // ViewModel oluşturulur oluşturulmaz Teklifi alabilirsiniz.
        Task {
            await fetchOffering()
        }
    }

    /**
     * RevenueCat'den mevcut Teklifi alır ve @Published özelliğini günceller.
     */
    func fetchOffering() async {
        self.isLoading = true

        do {
            let offerings = try await Purchases.shared.offerings()
            // panelde bu yerleşimde görüntülenmek üzere yapılandırdığınız
            // 'current' Offering'ı alır.
            self.offering = offerings.current
        } catch {
            print("Offering Alma hatası: \(error.localizedDescription)")
            // UI'de de hata durumlarını yönetebilirsiniz
        }

        self.isLoading = false
    }
}

RevenueCat iOS SDK Swift'in async/await'ını yerel olarak destekler ve en son SwiftUI uygulamalarına mükemmel şekilde uyum sağlar. @Published ile offering'ı yayınladığınızda SwiftUI görünümleri değişiklikleri reaktif olarak gözlemleyebilir.

SwiftUI ile Paywall UI Uygulama

Bu noktada her şey hazır. RevenueCatUI paketini eklediyseniz SwiftUI kullanarak kolayca ödeme duvarı arayüzü oluşturabilirsinizyapabilirsiniz.

RevenueCat'ın UI kütüphanesi yerleşik SwiftUI görünümü olan PaywallView sağlar ödeme duvarı ekranlarını hızlıca göstermenizi sağlar. Bu bileşen standart SwiftUI değiştiricileri kullanılarak tamamen özelleştirilebilir.

Sonraki SwiftUI'ın sheet değiştiricisini kullanarak ödeme duvarını uygulamanın ve göstermenin ne kadar basit olduğunu gösteren bir örnektir:

swift
import SwiftUI
import RevenueCat
import RevenueCatUI

struct ContentView: View {
    @State private var showPaywall = false

    var body: some View {
        Button("Ödeme Duvarı Gösterme") {
            showPaywall = true
        }
        .sheet(isPresented: $showPaywall) {
            // sayfada Ödeme Duvarı Gösterme
            PaywallView()
        }
    }
}

PaywallView otomatik olarak mevcut Teklifi alır ve RevenueCat panelinde yapılandırdığınız şablonu kullanarak gösterir. Zaten aldıysanız Offering nesnesini doğrudan da geçirebilirsiniz:

swift
import SwiftUI
import RevenueCat
import RevenueCatUI

struct ContentView: View {
    // Ödeme duvarı sayfası gösterimini tetikler.
    @State private var showPaywall = false

    // Ödeme duvarı için ViewModel örneği oluşturur.
    // @StateObject görünümle aynı yaşam döngüsünü sağlar.
    @StateObject private var paywallViewModel = PaywallViewModel()

    var body: some View {
        VStack(spacing: 20) {
            Text("Uygulamaya hoş geldiniz!")

            Button("Premium'a yükselt") {
                // Butona tıklandığında sayfayı göstermek için bayrak ayarlar.
                showPaywall = true
            }
        }
        .sheet(isPresented: $showPaywall) {
            // sayfa içeriğidir.
            // PaywallView'yı gösterir ve ViewModel'den Teklifi iletir.

            // Offering'ı alırken yükleme göstergesi gösterebilirsiniz.
            if paywallViewModel.isLoading {
                ProgressView()
            } else if let offering = paywallViewModel.offering {
                // Offering kullanılabilirse PaywallView'a iletin.
                PaywallView(offering: offering)
            } else {
                // İsteğe bağlı: Teklif yüklenemezse hata veya mesaj gösterin.
                Text("Üzgünüz, şu anda abonelik seçenekleri yüklenemiyor.")
            }
        }
    }
}

Kök görünüm gibi uygulamanızın en üst görünümüne bazı değiştiriciler ekleyebilirsiniz. Gösterim mantığını otomatik olarak yönetir.

iPhone'de RevenueCat Ödeme Duvarı sayfa veya tam ekran olarak gösterilebilir ve SwiftUI veya UIKit'te entegrasyon için çeşitli seçenekler vardır:

  • presentPaywallIfNeeded'yı kullanarak Yetki tabanlı otomatik gösterim
  • presentPaywallIfNeeded'yı kullanarak özel gösterim mantığı
  • PaywallView veya PaywallViewController'yı kullanarak manuel entegrasyon

Örneğin:

swift
import SwiftUI
import RevenueCat
import RevenueCatUI

@main
struct MyApp: App {
    // ... (init kod) ...

    var body: some Scene {
        WindowGroup {
            ContentView()
                // Bu değiştirici "premium" yetkisini kontrol eder.
                // Kullanıcıda yoksa ödeme duvarı sayfası gösterilir.
                .presentPaywallIfNeeded(
                    requiredEntitlementIdentifier: "premium",
                    purchaseCompleted: { customerInfo in
                        // Satın almayı kutlamak için iyi bir yer!
                        print("Satın alma tamamlandı: \(customerInfo.entitlements)")
                    },
                    restoreCompleted: { customerInfo in
                        // Entitlement aktif olduğunda ödeme duvarı otomatik olarak kapanır.
                        print("Geri yükleme tamamlandı: \(customerInfo.entitlements)")
                    }
                )
        }
    }
}

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.

Gördüğünüz gibi ödeme duvarı sistemi sunucu tabanlı UI olarak oluşturulmuştur. Yani uygulama güncellemesi göndermeden veya App Store incelemesinden geçmeden panelden doğrudan ödeme duvarının içeriğini ve tasarımını dinamik olarak güncelleyebilirsiniz.

Son

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

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