With this code, I'm getting an error:
| import Foundation |
| import Observation |
| import StoreKit |
| |
| enum ProductID: String { |
| case subscriptionMonthly = "app_monthly" |
| case subscriptionYearly = "monthly_yearly" |
| } |
| |
| @MainActor |
| @Observable |
| final class SubscriptionsHandler { |
| public var activeSubscription: String? = nil |
| |
| init() { |
| |
| Task(priority: .background) { |
| |
| for await verificationResult in Transaction.unfinished { |
| await handle(updatedTransaction: verificationResult) |
| } |
| |
| |
| |
| for await verificationResult in Transaction.currentEntitlements { |
| await handle(updatedTransaction: verificationResult) |
| } |
| } |
| Task(priority: .background) { |
| for await verificationResult in Transaction.updates { |
| await handle(updatedTransaction: verificationResult) |
| } |
| } |
| } |
| |
| private func handle(updatedTransaction verificationResult: VerificationResult<Transaction>) async { |
| |
| guard case .verified(let transaction) = verificationResult else { return } |
| |
| if let _ = transaction.revocationDate { |
| |
| |
| guard let productID = ProductID(rawValue: transaction.productID) else { |
| print("Unexpected product: \(transaction.productID).") |
| return |
| } |
| |
| activeSubscription = nil |
| |
| UserDefaults.standard.set(false, forKey: "isSubscribed") |
| |
| await transaction.finish() |
| return |
| } else if let expirationDate = transaction.expirationDate, expirationDate < Date() { |
| |
| activeSubscription = nil |
| |
| UserDefaults.standard.set(false, forKey: "isSubscribed") |
| |
| return |
| } else { |
| |
| guard let productID = ProductID(rawValue: transaction.productID) else { |
| print("Unexpected product: \(transaction.productID).") |
| return |
| } |
| |
| activeSubscription = transaction.productID |
| |
| UserDefaults.standard.set(true, forKey: "isSubscribed") |
| |
| await transaction.finish() |
| return |
| } |
| } |
| } |
SwiftUICore/Environment+Objects.swift:34: Fatal error: No Observable object of type SubscriptionsHandler found. A View.environmentObject(_:) for SubscriptionsHandler may be missing as an ancestor of this view.