Mercurial > public > geoquiz
diff GeoQuiz/Models/Controllers/StoreController.swift @ 26:425078c01194
refactor code
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Wed, 09 Nov 2022 10:30:01 +0100 |
parents | GeoQuiz/Logic/StoreKitController.swift@b145c408f791 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GeoQuiz/Models/Controllers/StoreController.swift Wed Nov 09 10:30:01 2022 +0100 @@ -0,0 +1,98 @@ +// +// StoreController.swift +// GeoQuiz +// +// Created by Dennis Concepción Martín on 9/10/22. +// + +import Foundation +import RevenueCat + +class StoreController: ObservableObject { + @Published var errorAlertTitle = "" + @Published var errorAlertMessage = "" + + @Published var showingErrorAlert = false + @Published var showingSuccessAlert = false + @Published var showingActivityAlert = false + + @Published var offerings: Offerings? = nil + @Published var customerInfo: CustomerInfo? { + didSet { + premiumIsActive = customerInfo?.entitlements["Premium"]?.isActive == true + } + } + + @Published var premiumIsActive = false + + init() { + #if DEBUG + premiumIsActive = true + #else + Purchases.shared.getCustomerInfo { (customerInfo, error) in + self.customerInfo = customerInfo + } + #endif + } + + func buy(_ package: Package) { + showingActivityAlert = true + + 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.errorAlertTitle = "Opps!" + self.errorAlertMessage = "You don't have GeoQuiz Premium unlocked." + self.showingErrorAlert = true + } + + 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 + } + } +}