gpt4 book ai didi

ios - SwiftyStoreKit - 如何正确恢复自动更新订阅?

转载 作者:行者123 更新时间:2023-11-29 05:14:04 27 4
gpt4 key购买 nike

因此,我对应用程序中的自动续订订阅有一个非常基本的概念,可以解锁 PRO 功能。我还有一项非消耗性购买,它是“一次性购买订阅”,可以一次性解锁 PRO 功能。

我无法理解的是,当我调用 restorePurchases (使用 SwiftyStoreKit)时,它会带来用户曾经进行过的所有购买。这些可能包括多次购买早已过期的同一订阅。

接下来我要做的是对每个恢复的购买调用一个 verifyPurchase 方法,该方法检查曾经购买的每个订阅的过期日期,如果过期 - 它会取消 PRO通过清除钥匙串(keychain)从用户处获取(因为它认为当前订阅已过期):

  case .expired(let expiryDate, let items):
log.info("Subscription has expired on \(expiryDate)")
log.debug(items)
self.activeSubscription = nil
self.clearStore()
seal.reject(SubscriptionServiceError.expired(on: expiryDate))
}

因此,我的应用中当前发生的情况是,即使用户有有效订阅,如果他或她尝试restorePurchases,也有可能verifyPurchase上次购买验证将是一个过期的订阅,导致用户取消应用程序的 PRO 版本,即使有有效的订阅。

避免此错误并始终验证唯一正确的订阅的最佳做法是什么?

最佳答案

来自SwiftyStoreKit docs :

let purchaseResult = SwiftyStoreKit.verifySubscription(
ofType: .autoRenewable, // or .nonRenewing (see below)
productId: productId,
inReceipt: receipt)

switch purchaseResult {
case .purchased(let expiryDate, let items):
print("\(productId) is valid until \(expiryDate)\n\(items)\n")
case .expired(let expiryDate, let items):
print("\(productId) is expired since \(expiryDate)\n\(items)\n")
case .notPurchased:
print("The user has never purchased \(productId)")
}

您似乎需要传入产品 ID 来确定特定订阅是否仍然有效。

您可能不想在每次应用程序启动时都执行此操作,因此您应该将结果缓存在某处 - 您所需要的可能只是到期日期。

关于ios - SwiftyStoreKit - 如何正确恢复自动更新订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com