iOS Uygulama İçi Satın Alma ve Ödeme Duvarları Genel Bakış
0:02:00RevenueCat'ı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.
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:
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:
- Go to the RevenueCat dashboard
- Navigate to your project
- Click on API keys in the left sidebar
- Copy your Apple App Store API key (it should start with
appl_)
Initialize the SDK
Ardından, aşağıdaki kodu kullanarak uygulamanızın init() metodu veya AppDelegate'de Purchases SDK'yı başlatın:
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:
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:
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:
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:
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:
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:
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: