Пропонуючи безкоштовну пробну версію, це чудовий спосіб заохотити користувачів випробувати преміум-функції вашої програми, збільшуючи шанси перетворити їх на платних передплатників. З 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 у Xcode :
Перейдіть у меню Файл > Створити > Файл... > Файл конфігурації StoreKit у Xcode.
Налаштуйте продукти за підпискою, включаючи пробні періоди та стани відповідності.
Порада професіонала : Ви також можете створити новий файл конфігурації для синхронізації файлу конфігурації з App Store Connect, і таким чином не потрібно налаштовувати всі продукти.
Імітуйте різні сценарії:
Право на безкоштовну пробну версію:
Щоб імітувати користувача безкоштовної пробної версії, переконайтеся, що в диспетчері транзакцій немає транзакцій.
Щоб побачити менеджер транзакцій. Перейдіть до Debug → StoreKit → Manage Transactions
Не відповідає вимогам для безкоштовної пробної версії:
Для імітації користувача, який не має права на безкоштовну пробну версію. Ви можете вручну додати підписку з менеджера транзакцій у менеджер транзакцій. Ви можете натиснути кнопку «Додати» на екрані менеджера транзакцій, а потім вибрати транзакцію, яку потрібно додати. Тут я намагаюся налаштувати місячну підписку для користувача. Після додавання цієї транзакції та повторного запуску програми ви побачите, що відповідність пробній версії позначена як false.
Порада професіонала: ви також можете додати UUID до покупки, використовуючи це поле для збереження ідентифікатора користувача. Таким чином ви можете переконатися, який користувач зробив покупку у вашій програмі. Пізніше цю інформацію можна буде отримати з історії транзакцій користувача.
Тестування в ізольованому середовищі дає вам змогу тестувати покупки в програмі та підписки вашого додатка в середовищі, яке імітує робоче середовище App Store, а також дає вам свободу висміювати пару крайніх випадків, як-от перервані покупки, спільний доступ до сім’ї та імітація покупок, зроблених поза межами програмі або на іншому пристрої. Це також дозволяє
Але перш за все, ось як налаштувати та використовувати тестування пісочниці:
Створіть обліковий запис тестувальника Sandbox:
Увійдіть за допомогою облікового запису тестувальника Sandbox:
Запустіть програму в режимі пісочниці:
Перевірте різні сценарії:
Порада професіонала: обліковий запис Apple не може мати кілька активних підписок, тому два різні користувачі не можуть робити окремі покупки в додатку за допомогою одного Apple ID. Обов’язково перевірте свою програму на наявність цього випадку користувача.
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/