我尝试通过 StoreKit 2 在我的应用程序中实现订阅有点疯狂。
第一次通常一切正常,但订阅过期后,当我尝试重新订阅时,我会得到不一致的行为。有时它会工作得很好,尽管速度很慢。然而,大多数时候,product.purchase() 会提供 .success,但实际上不会重新订阅,并且不会提示用户任何“确认订阅”屏幕。然后,在检查交易时,代码正确返回 nil,因为我们实际上尚未续订订阅。
这只是沙盒行为吗?我担心将代码投入生产时出现这个奇怪的问题。
我的完整代码与此类似 - https://www.revenuecat.com/blog/engineering/ios-in-app-subscription-tutorial-with-storekit-2-and-swift/
更新:也许这只是苹果沙盒服务器是垃圾 - 如果我一遍又一遍地按下按钮,最终会出现“确认订阅”屏幕?
我在这个问题上苦苦挣扎了一段时间,然后就我而言,我发现它与未完成的交易有关。
请务必在您的应用程序收到订阅续订更新时完成交易。
func observeTransactionUpdates() -> Task<Void, Never> {
Task(priority: .background) { [unowned self] in
for await result in Transaction.updates {
//my own function for retrieving the purchased product
await self.fetchPurchasedProducts()
//Always finish a transaction.
if case .verified(let transaction) = result {
await transaction.finish()
}
}
}
}
另一个有用的技巧是检查与订阅相关的所有未完成的交易,并在尝试购买新交易之前完成它们。
可以通过执行类似以下操作来完成:
for await result in Transaction.unfinished {
if case .verified(let transaction) = result {
await transaction.finish()
}
}