Mercurial > public > geoquiz
diff GeoQuiz/Logic/StoreKitController.swift @ 19:f140bb277c96
refactor code
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Sun, 23 Oct 2022 00:11:38 +0100 |
parents | GeoQuiz/Logic/StoreKitRCClass.swift@136928bae534 |
children | b145c408f791 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GeoQuiz/Logic/StoreKitController.swift Sun Oct 23 00:11:38 2022 +0100 @@ -0,0 +1,94 @@ +// +// StoreKitController.swift +// GeoQuiz +// +// Created by Dennis Concepción Martín on 9/10/22. +// + +import Foundation +import RevenueCat + +class StoreKitController: 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() { + Purchases.shared.getCustomerInfo { (customerInfo, error) in + self.customerInfo = customerInfo + } + } + + 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 + } + } +}