所以我在应用程序中有一个非常基本的自动更新订阅概念,它可以解锁 PRO 功能。我还有一个非消耗品购买,它是“一次性购买订阅”,它可以永远解锁 PRO 功能。
我无法理解的是,当我调用restorePurchases
(使用SwiftyStoreKit)时,它会带来用户曾经进行的所有购买。这些可能包括多次购买很久以前过期的同一订阅。
我接下来要做的是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
最后一次购买验证的订阅可能会过期,从而导致应用程序的 PRO 版本被取消用户,即使在船上有有效订阅。
避免此错误并始终验证唯一正确订阅的最佳做法是什么?