Ponuda besplatne probne verzije odličan je način da ohrabrite korisnike da isprobaju premium funkcije vaše aplikacije, povećavajući šanse da ih pretvore u pretplatnike koji plaćaju. Sa StoreKit-om 2, Apple je predstavio poboljšane alate koji će vam pomoći da provjerite da li korisnik ispunjava uslove za uvodne ponude. U ovom članku ćemo vas voditi kroz implementaciju besplatnih probnih verzija u vašoj aplikaciji, zajedno s isječcima koda za provjeru ispunjavanja uslova korisnika. Također ćemo pokriti scenarije testiranja za kvalifikovane i nekvalifikovane korisnike. I svakako pripazite na " Profesionalne savjete " razasute po cijelom članku, gdje dijelim neke lične uvide iz svog iskustva!
Prije nego što počnete s kodiranjem, obavezno konfigurirajte postavke kupovine unutar aplikacije u App Store Connectu:
Ovo ću pojednostaviti tako što ću vam pokazati isječak koda za način na koji želite izračunati podobnost za probnu verziju za korisnika
Kreirajte prikaz SwiftUI za prikaz ponude besplatne probne verzije i upravljanje interakcijama korisnika. Ostaviću puno komentara u isječku koda da vas provedem.
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 pruža robusne alate za testiranje različitih korisničkih stanja (npr. ispunjavaju uslove ili ne ispunjavaju uslove za besplatnu probnu verziju) koristeći StoreKit Testing u Xcode-u :
Idite na File > New > File... > StoreKit Configuration File u Xcode.
Postavite svoje pretplatničke proizvode, uključujući probne periode i statuse podobnosti.
Profesionalni savjet : Također možete kreirati novu konfiguracijsku datoteku za sinhronizaciju konfiguracijske datoteke iz App Store Connecta i na taj način ne morate postavljati sve proizvode.
Simulirajte različite scenarije:
Ispunjava uslove za besplatnu probnu verziju:
Da biste simulirali besplatnog probnog korisnika, uvjerite se da nema transakcija u upravitelju transakcija.
Da vidite upravitelja transakcija. Idite na Otklanjanje grešaka → StoreKit → Upravljanje transakcijama
Ne ispunjava uslove za besplatnu probnu verziju:
Za simulaciju korisnika koji ne ispunjava uslove za besplatnu probnu verziju. Možete ručno dodati pretplatu iz upravitelja transakcija na upravitelju transakcija. Možete dodirnuti dugme za dodavanje na ekranu menadžera transakcija, a zatim odabrati transakciju koju želite da dodate. Evo, pokušavam konfigurirati mjesečnu pretplatu za korisnika. Nakon dodavanja te transakcije i ponovnog pokretanja aplikacije, trebali biste vidjeti da je ispunjavanje uslova za probu označeno kao netačno.
Profesionalni savjet: Uz kupovinu možete uključiti i UUID, koristeći ovo polje za pohranu ID-a korisnika. Na taj način možete osigurati koji korisnik je kupio na vašoj aplikaciji. Ove informacije se kasnije mogu dohvatiti iz istorije transakcija korisnika.
Testiranje u Sandboxu vam omogućava da testirate kupovine i pretplate vaše aplikacije u aplikaciji u okruženju koje imitira proizvodno okruženje App Store-a, a istovremeno vam daje slobodu da se rugate nekoliko rubnih slučajeva kao što su prekinuta kupovina, dijeljenje s porodicom i simulacija kupovina napravljenih izvan aplikaciji ili na drugom uređaju. Takođe vam omogućava da
Ali prije svega, evo kako postaviti i koristiti sandbox testiranje:
Kreirajte račun za testiranje sandboxa:
Prijavite se sa Sandbox Tester računom:
Pokrenite svoju aplikaciju u Sandbox načinu rada:
Testirajte različite scenarije:
Savjet stručnjaka: Apple račun ne može imati više aktivnih pretplata, tako da dva različita korisnika ne mogu vršiti odvojene kupovine u aplikaciji koristeći isti Apple ID. Obavezno provjerite svoju aplikaciju za ovaj korisnički slučaj.
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/