comparison 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
comparison
equal deleted inserted replaced
25:b3df0f5dc750 26:425078c01194
1 //
2 // StoreController.swift
3 // GeoQuiz
4 //
5 // Created by Dennis Concepción Martín on 9/10/22.
6 //
7
8 import Foundation
9 import RevenueCat
10
11 class StoreController: ObservableObject {
12 @Published var errorAlertTitle = ""
13 @Published var errorAlertMessage = ""
14
15 @Published var showingErrorAlert = false
16 @Published var showingSuccessAlert = false
17 @Published var showingActivityAlert = false
18
19 @Published var offerings: Offerings? = nil
20 @Published var customerInfo: CustomerInfo? {
21 didSet {
22 premiumIsActive = customerInfo?.entitlements["Premium"]?.isActive == true
23 }
24 }
25
26 @Published var premiumIsActive = false
27
28 init() {
29 #if DEBUG
30 premiumIsActive = true
31 #else
32 Purchases.shared.getCustomerInfo { (customerInfo, error) in
33 self.customerInfo = customerInfo
34 }
35 #endif
36 }
37
38 func buy(_ package: Package) {
39 showingActivityAlert = true
40
41 Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in
42 if customerInfo?.entitlements["Premium"]?.isActive == true {
43 self.showingSuccessAlert = true
44 }
45
46 if let error = error as? RevenueCat.ErrorCode {
47 switch error {
48 case .purchaseCancelledError:
49 self.errorAlertTitle = "Purchase cancelled"
50 self.errorAlertMessage = ""
51 self.showingErrorAlert = true
52 default:
53 self.errorAlertTitle = "The purchase failed"
54 self.errorAlertMessage = "If the problem persists, contact me at dmartin@dennistech.io"
55 self.showingErrorAlert = true
56 }
57 }
58
59 self.customerInfo = customerInfo
60 self.showingActivityAlert = false
61 }
62 }
63
64 func restorePurchase() {
65 showingActivityAlert = true
66
67 Purchases.shared.restorePurchases { customerInfo, error in
68 if customerInfo?.entitlements["Premium"]?.isActive == true {
69 self.showingSuccessAlert = true
70 } else {
71 self.errorAlertTitle = "Opps!"
72 self.errorAlertMessage = "You don't have GeoQuiz Premium unlocked."
73 self.showingErrorAlert = true
74 }
75
76 if let _ = error {
77 self.errorAlertTitle = "The purchase couldn't be restored"
78 self.errorAlertMessage = "If the problem persists, contact me at dmartin@dennistech.io"
79 self.showingErrorAlert = true
80 }
81
82 self.customerInfo = customerInfo
83 self.showingActivityAlert = false
84 }
85 }
86
87 func fetchOfferings() {
88 Purchases.shared.getOfferings { (offerings, error) in
89 if let _ = error {
90 self.errorAlertTitle = "The product couldn't be fetched"
91 self.errorAlertMessage = "If the problem persists, contact me at dmartin@dennistech.io"
92 self.showingErrorAlert = true
93 }
94
95 self.offerings = offerings
96 }
97 }
98 }