annotate GeoQuiz/Logic/StoreKitController.swift @ 21:b145c408f791

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