|
@@ -81,6 +81,15 @@ final class SubscriptionManager: ObservableObject {
|
|
|
|
|
|
|
|
init() {
|
|
init() {
|
|
|
hasEverPurchasedPremium = UserDefaults.standard.bool(forKey: Self.cachedHasEverPurchasedKey)
|
|
hasEverPurchasedPremium = UserDefaults.standard.bool(forKey: Self.cachedHasEverPurchasedKey)
|
|
|
|
|
+
|
|
|
|
|
+ // Optimistic restore so returning subscribers aren't paywalled while StoreKit resolves.
|
|
|
|
|
+ if UserDefaults.standard.bool(forKey: Self.cachedPremiumKey) {
|
|
|
|
|
+ hasPremiumAccess = true
|
|
|
|
|
+ if let planRaw = UserDefaults.standard.string(forKey: Self.cachedPremiumPlanKey),
|
|
|
|
|
+ let plan = PaywallPlan(rawValue: planRaw) {
|
|
|
|
|
+ activePremiumPlan = plan
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func start() {
|
|
func start() {
|
|
@@ -512,14 +521,8 @@ final class SubscriptionManager: ObservableObject {
|
|
|
}
|
|
}
|
|
|
guard await subscription.isEligibleForIntroOffer else { return nil }
|
|
guard await subscription.isEligibleForIntroOffer else { return nil }
|
|
|
|
|
|
|
|
- let config = PaywallConfigService.shared.config
|
|
|
|
|
- if let offer = subscription.introductoryOffer {
|
|
|
|
|
- return PaywallTrialDisplay.from(offer: offer, config: config)
|
|
|
|
|
- }
|
|
|
|
|
- if let fallback = config.trial.fallbackDuration {
|
|
|
|
|
- return PaywallTrialDisplay.from(fallback: fallback, config: config)
|
|
|
|
|
- }
|
|
|
|
|
- return nil
|
|
|
|
|
|
|
+ guard let offer = subscription.introductoryOffer else { return nil }
|
|
|
|
|
+ return PaywallTrialDisplay.from(offer: offer, config: PaywallConfigService.shared.config)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private func persistPremiumCache() {
|
|
private func persistPremiumCache() {
|