Mercurial > public > geoquiz
diff GeoQuiz/Logic/StoreKitRCClass.swift @ 13:bdfff35dd43c
implement RevenueCat
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Wed, 12 Oct 2022 11:47:29 +0200 |
parents | ce7ea84f67f5 |
children | 136928bae534 |
line wrap: on
line diff
--- a/GeoQuiz/Logic/StoreKitRCClass.swift Sun Oct 09 19:46:44 2022 +0200 +++ b/GeoQuiz/Logic/StoreKitRCClass.swift Wed Oct 12 11:47:29 2022 +0200 @@ -7,27 +7,89 @@ import Foundation import RevenueCat +import SwiftUI class StoreKitRC: ObservableObject { - @Published var productPrice: String? + @Published var errorAlertTitle = "" + @Published var errorAlertMessage = "" + @Published var showingErrorAlert = false - @Published var errorMessage = "" - + @Published var showingSuccessAlert = false + @Published var showingActivityAlert = false + + @Published var offerings: Offerings? = nil + @Published var customerInfo: CustomerInfo? { + didSet { + isActive = customerInfo?.entitlements["Premium"]?.isActive == true + } + } + + @Published var isActive = false + init() { + Purchases.shared.getCustomerInfo { (customerInfo, error) in + self.customerInfo = customerInfo + } + } + + func buy(_ package: Package) { + showingActivityAlert = true - // Get product metadata - Purchases.shared.getOfferings { (offerings, error) in - if let package = offerings?.current?.lifetime?.storeProduct { - self.productPrice = package.localizedPriceString + Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in + if customerInfo?.entitlements["Premium"]?.isActive == true { + self.showingSuccessAlert = true + } + + if let error = error as? RevenueCat.ErrorCode { + switch error { + case .purchaseCancelledError: + self.errorAlertTitle = "Purchase cancelled" + self.errorAlertMessage = "" + self.showingErrorAlert = true + default: + self.errorAlertTitle = "The purchase failed" + self.errorAlertMessage = "If the problem persists, contact me at dmartin@dennistech.io" + self.showingErrorAlert = true + } + } + + self.customerInfo = customerInfo + self.showingActivityAlert = false + } + } + + func restorePurchase() { + showingActivityAlert = true + + Purchases.shared.restorePurchases { customerInfo, error in + if customerInfo?.entitlements["Premium"]?.isActive == true { + self.showingSuccessAlert = true } else { - self.errorMessage = "There was an error fetching the product. Please, contact the developer at dmartin@dennistech.io." + self.errorAlertTitle = "Opps!" + self.errorAlertMessage = "You don't have GeoQuiz Premium unlocked." self.showingErrorAlert = true } - if let error = error { - self.errorMessage = error.localizedDescription + if let _ = error { + self.errorAlertTitle = "The purchase couldn't be restored" + self.errorAlertMessage = "If the problem persists, contact me at dmartin@dennistech.io" self.showingErrorAlert = true } + + self.customerInfo = customerInfo + self.showingActivityAlert = false + } + } + + func fetchOfferings() { + Purchases.shared.getOfferings { (offerings, error) in + if let _ = error { + self.errorAlertTitle = "The product couldn't be fetched" + self.errorAlertMessage = "If the problem persists, contact me at dmartin@dennistech.io" + self.showingErrorAlert = true + } + + self.offerings = offerings } } }