Ponuka bezplatnej skúšobnej verzie je skvelý spôsob, ako povzbudiť používateľov, aby vyskúšali prémiové funkcie vašej aplikácie, čím sa zvýši šanca, že ich premenia na platiacich predplatiteľov. S aplikáciou StoreKit 2 spoločnosť Apple predstavila vylepšené nástroje, ktoré vám pomôžu skontrolovať, či používateľ spĺňa úvodné ponuky. V tomto článku vás prevedieme implementáciou bezplatných skúšobných verzií do vašej aplikácie spolu s útržkami kódu na overenie vhodnosti používateľa. Budeme sa zaoberať aj testovacími scenármi pre oprávnených aj neoprávnených používateľov. A určite dávajte pozor na „ Tipy pre profesionálov “ roztrúsené po celom článku, kde zdieľam niekoľko osobných postrehov z mojej skúsenosti!
Skôr ako začnete s kódovaním, nezabudnite nakonfigurovať nastavenia nákupu v aplikácii v App Store Connect:
Zjednoduším to tým, že vám ukážem útržok kódu, ako chcete pre používateľa vypočítať oprávnenosť na skúšobnú verziu
Vytvorte zobrazenie SwiftUI na zobrazenie ponuky bezplatnej skúšobnej verzie a spracovanie interakcií používateľov. V úryvku kódu zanechám veľa komentárov, ktoré vás prevedú.
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 poskytuje robustné nástroje na testovanie rôznych stavov používateľov (napr. vhodných alebo nevhodných na bezplatnú skúšobnú verziu) pomocou StoreKit Testing v Xcode :
Prejdite na Súbor > Nový > Súbor... > Konfiguračný súbor StoreKit v Xcode.
Nastavte si predplatné produktov vrátane skúšobných období a stavov oprávnenosti.
Tip pre profesionálov : Môžete tiež vytvoriť nový konfiguračný súbor na synchronizáciu konfiguračného súboru z App Store Connect, a tak nemusíte nastavovať všetky produkty.
Simulujte rôzne scenáre:
Nárok na bezplatnú skúšobnú verziu:
Ak chcete simulovať používateľa bezplatnej skúšobnej verzie, uistite sa, že v správcovi transakcií nemáte žiadne transakcie.
Ak chcete zobraziť správcu transakcií. Prejdite na Debug → StoreKit → Manage Transactions
Nespĺňa podmienky na bezplatnú skúšobnú verziu:
Simulovať používateľa, ktorý nemá nárok na bezplatnú skúšobnú verziu. Predplatné môžete pridať manuálne zo správcu transakcií v správcovi transakcií. Môžete klepnúť na tlačidlo Pridať na obrazovke správcu transakcií a potom vybrať transakciu, ktorú chcete pridať. Tu sa pokúšam nakonfigurovať mesačné predplatné pre používateľa. Po pridaní tejto transakcie a opätovnom spustení aplikácie by ste mali vidieť oprávnenosť skúšobnej verzie označenú ako nepravdivú.
Tip pre profesionálov: K nákupu môžete zahrnúť aj UUID, pričom toto pole použite na uloženie ID používateľa. Týmto spôsobom môžete zistiť, ktorý používateľ uskutočnil nákup vo vašej aplikácii. Tieto informácie je možné neskôr získať z histórie transakcií používateľa.
Testovanie v karanténe vám umožňuje testovať nákupy v aplikácii a predplatné v prostredí, ktoré napodobňuje produkčné prostredie App Store, a zároveň vám dáva slobodu zosmiešňovať niekoľko hraničných prípadov, ako je prerušený nákup, rodinné zdieľanie a simulácia nákupov uskutočnených mimo aplikácii alebo v inom zariadení. To vám tiež umožňuje
Ale ešte predtým, tu je návod, ako nastaviť a používať testovanie v karanténe:
Vytvorte si účet testera v karanténe:
Prihláste sa pomocou účtu Sandbox Tester:
Spustite svoju aplikáciu v režime karantény:
Vyskúšajte rôzne scenáre:
Tip pre profesionálov: Účet Apple nemôže mať viacero aktívnych odberov, takže dvaja rôzni používatelia nemôžu vykonávať samostatné nákupy v aplikácii pomocou rovnakého Apple ID. Nezabudnite skontrolovať svoju aplikáciu pre tento prípad používateľa.
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/