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