Прапанова бясплатнай пробнай версіі - выдатны спосаб заахвоціць карыстальнікаў апрабаваць прэміум-функцыі вашай праграмы, павялічваючы шанцы ператварыць іх у платных падпісчыкаў. У StoreKit 2 Apple прадставіла пашыраныя інструменты, якія дапамогуць вам праверыць права карыстальніка на ўступныя прапановы. У гэтым артыкуле мы правядзем вас праз рэалізацыю бясплатных пробных версій у вашым дадатку, у камплекце з фрагментамі кода для праверкі прыдатнасці карыстальніка. Мы таксама разгледзім сцэнарыі тэсціравання як для карыстальнікаў, якія маюць права, так і для карыстальнікаў, якія не маюць права. І не забудзьцеся сачыць за « Парадамі прафесіяналаў », раскіданымі па артыкуле, дзе я дзялюся некаторымі асабістымі меркаваннямі са свайго досведу!
Перш чым прыступіць да кадавання, пераканайцеся, што вы сканфігуравалі параметры пакупак у праграме ў App Store Connect:
Я зраблю гэта простым, пакажу вам фрагмент кода, які паказвае, як вы хочаце вылічыць права на пробную версію для карыстальніка
Стварыце прагляд SwiftUI для адлюстравання прапановы бясплатнай пробнай версіі і апрацоўкі ўзаемадзеяння карыстальнікаў. Я пакіну шмат каментарыяў ва фрагменце кода, каб правесці вас.
import StoreKit2 // StoreManager is responsible to communicate with Storekit Framework provided by Apple for monetization class StoreManager: ObservableObject { @Published var message: String = "" // We will use this property to display the right message to the user @Published var products: [Product] = [] // This will be responsible to store the products fetched that we defined // in App Store Connect // Fetch products from the App Store func fetchProducts() { Task { do { // product_id is the id that you would have defined in App Store Connect. let storeProducts = try await Product.products(for: ["product_id"]) products = storeProducts } catch { message = "Failed to fetch products: \(error.localizedDescription)" } } } // Initiate purchase func purchase() { guard let product = products.first else { // There is a possibility of products not being fetched from App Store Connect. // Pro Tip: From experience, even though we defined the products on App Store Connect, it is possible // that the products are not found post attempting to fetch. So, it is important to handle this case. message = "No product available." return } Task { do { let result = try await product.purchase() switch result { case .success(let verification): switch verification { case .verified: message = "Purchase successful!" case .unverified: message = "Could not verify the purchase." } case .userCancelled: message = "Purchase cancelled." case .pending: message = "Purchase is pending." @unknown default: message = "Unknown result." } } catch { message = "Purchase failed: \(error.localizedDescription)" } } } // Check if the user is eligible for a free trial func checkTrialEligibility() async -> Bool { guard let product = products.first else { return false } do { // So when you define a auto renewable subscriptions, there are usually bond in a group. The group can again be // found in App Store Connect let eligibility = try await product.subscription?.isEligibleForIntroOffer(for groupID: 111111) return eligibility ?? false } catch { message = "Error checking trial eligibility: \(error.localizedDescription)" return false } } }
import SwiftUI import StoreKit struct SubscriptionView: View { @StateObject private var storeManager = StoreManager() @State private var isEligibleForFreeTrial = false var body: some View { VStack { Text("Unlock Premium Features") .font(.title) .padding() Text("Get a 7-day free trial of our premium subscription.") .multilineTextAlignment(.center) .padding() Button(action: { storeManager.purchase() }) { // Based on user status, we can display the text Text(isEligibleForFreeTrial ? "Start Free Trial" : "Start Subscription") .bold() .frame(width: 200, height: 50) .background(Color.blue) .foregroundColor(.white) .cornerRadius(10) } Text(storeManager.message) .padding() } .onAppear { storeManager.fetchProducts() checkTrialEligibility() } } private func checkTrialEligibility() { Task { isEligibleForFreeTrial = await storeManager.checkTrialEligibility() } } }
Apple прадастаўляе надзейныя інструменты для тэсціравання розных станаў карыстальнікаў (напрыклад, права або непрыдатнасць для бясплатнай пробнай версіі) з выкарыстаннем StoreKit Testing у Xcode :
Перайдзіце ў меню Файл > Новы > Файл... > Файл канфігурацыі StoreKit у Xcode.
Наладзьце падпісныя прадукты, уключаючы пробныя перыяды і станы прыдатнасці.
Прафесійная парада : Вы таксама можаце стварыць новы файл канфігурацыі для сінхранізацыі файла канфігурацыі з App Store Connect, і такім чынам вам не спатрэбіцца наладжваць усе прадукты.
Імітацыя розных сцэнарыяў:
Права на бясплатную пробную версію:
Каб змадэляваць бясплатнага пробнага карыстальніка, пераканайцеся, што ў менеджэры транзакцый няма транзакцый.
Каб убачыць менеджэр транзакцый. Перайдзіце ў меню Debug → StoreKit → Manage Transactions
Непрыдатныя для бясплатнай пробнай версіі:
Для імітацыі карыстальніка, які не мае права на бясплатную пробную версію. Вы можаце ўручную дадаць падпіску з дыспетчара транзакцый у дыспетчар транзакцый. Вы можаце націснуць кнопку дадання на экране дыспетчара транзакцый, а затым выбраць транзакцыю, якую хочаце дадаць. Тут я спрабую наладзіць штомесячную падпіску для карыстальніка. Пасля дадання гэтай транзакцыі і паўторнага запуску праграмы вы павінны ўбачыць права на пробную версію, пазначаную як ілжывая.
Прафесійная парада: Вы таксама можаце ўключыць UUID з пакупкай, выкарыстоўваючы гэта поле для захавання ідэнтыфікатара карыстальніка. Такім чынам вы можаце даведацца, які карыстальнік зрабіў куплю ў вашым дадатку. Пазней гэтую інфармацыю можна будзе атрымаць з гісторыі транзакцый карыстальніка.
Тэставанне ў пясочніцы дазваляе вам правяраць пакупкі і падпіскі ў праграме ў асяроддзі, якое імітуе вытворчае асяроддзе App Store, а таксама дае вам свабоду высмейваць пару пераважных выпадкаў, такіх як перапыненыя пакупкі, сумеснае выкарыстанне сям'і і імітацыя пакупак, зробленых па-за межамі дадатак або ў іншай прыладзе. Гэта таксама дазваляе вам
Але перш за ўсё вось як наладзіць і выкарыстоўваць тэсціраванне пясочніцы:
Стварыце ўліковы запіс тэсціроўшчыка Sandbox:
Увайдзіце з дапамогай уліковага запісу тэсціроўшчыка Sandbox:
Запусціце сваю праграму ў рэжыме пясочніцы:
Праверце розныя сцэнарыі:
Прафесійная парада: Уліковы запіс Apple не можа мець некалькі актыўных падпісак, таму два розныя карыстальнікі не могуць рабіць асобныя пакупкі ў праграме, выкарыстоўваючы адзін і той жа ідэнтыфікатар Apple. Абавязкова праверце сваю праграму на гэты выпадак карыстальніка.
https://developer.apple.com/documentation/storekit
https://developer.apple.com/documentation/xcode/setting-up-storekit-testing-in-xcode/
https://developer.apple.com/app-store-connect/