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 }