因此,我有一个非常基本的概念,自动可再生订阅在应用程序中,解锁专业功能。我也有一个非消费购买,这是一个“一次性购买订阅”,其中解锁专业功能一劳永逸。
我无法理解的是,当我调用SwiftyStoreKit) (使用restorePurchases )时,它带来了用户曾经购买过的所有东西。这些可能包括多次购买相同的订阅,而这些订阅很久以前就过期了。
我接下来要做的是对每一次恢复的采购调用一个verifyPurchase方法,该方法检查每一次购买的订阅的过期日期,如果它过期了--它通过清除密钥链(因为它认为当前订阅过期了)从用户那里删除PRO:
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上一次购买验证将是过期的订阅,从而导致取消的亲版本的应用程序,即使有一个主动订阅。
什么是最好的做法,以避免这一错误,并始终验证一个和唯一正确的订阅?
发布于 2019-12-17 14:52:43
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,以确定某个特定订阅是否仍处于活动状态。
您可能不想在每次启动应用程序时都这样做,所以您应该将结果缓存到某个地方--您所需要的可能就是到期日期。
https://stackoverflow.com/questions/59367903
复制相似问题