Skip to content

Instantly share code, notes, and snippets.

@Dimillian
Last active January 3, 2023 12:20
Show Gist options
  • Save Dimillian/9871bd65f35748ab8761c8fdc2c07a31 to your computer and use it in GitHub Desktop.
Save Dimillian/9871bd65f35748ab8761c8fdc2c07a31 to your computer and use it in GitHub Desktop.
import Foundation
import SwiftUI
import Purchases
public class SubscriptionManager: ObservableObject {
public static let shared = SubscriptionManager()
public enum SubscriptionStatus {
case subscribed, notSubscribed
}
@Published public var monthlySubscription: Purchases.Package?
@Published public var yearlySubscription: Purchases.Package?
@Published public var lifetime: Purchases.Package?
@Published public var inPaymentProgress = false
@Published public var subscriptionStatus: SubscriptionStatus = AppUserDefaults.shared.isSubscribed ? .subscribed : .notSubscribed
init() {
Purchases.configure(withAPIKey: "glVAIPplNhAuvgOlCcUcrEaaCQwLRzQs")
Purchases.shared.offerings { (offerings, error) in
self.monthlySubscription = offerings?.current?.monthly
self.lifetime = offerings?.current?.lifetime
self.yearlySubscription = offerings?.current?.annual
}
refreshSubscription()
}
public func purchase(source: String, product: Purchases.Package) {
guard !inPaymentProgress else { return }
inPaymentProgress = true
Purchases.shared.setAttributes(["source": source,
"number_of_launch": "\(AppUserDefaults.shared.numberOfLaunch)"])
Purchases.shared.purchasePackage(product) { (_, info, _, _) in
self.processInfo(info: info)
}
}
public func refreshSubscription() {
Purchases.shared.purchaserInfo { (info, _) in
self.processInfo(info: info)
}
}
public func restorePurchase() {
Purchases.shared.restoreTransactions { (info, _) in
self.processInfo(info: info)
}
}
private func processInfo(info: Purchases.PurchaserInfo?) {
if info?.entitlements.all["AC+"]?.isActive == true {
subscriptionStatus = .subscribed
AppUserDefaults.shared.isSubscribed = true
} else {
AppUserDefaults.shared.isSubscribed = false
subscriptionStatus = .notSubscribed
}
inPaymentProgress = false
}
}
@X901
Copy link

X901 commented Jan 3, 2023

You should remove your API Key !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment