StoreKit 无法重新订阅(重新购买)过期订阅

问题描述 投票:0回答:1

我尝试通过 StoreKit 2 在我的应用程序中实现订阅有点疯狂。

第一次通常一切正常,但订阅过期后,当我尝试重新订阅时,我会得到不一致的行为。有时它会工作得很好,尽管速度很慢。然而,大多数时候,product.purchase() 会提供 .success,但实际上不会重新订阅,并且不会提示用户任何“确认订阅”屏幕。然后,在检查交易时,代码正确返回 nil,因为我们实际上尚未续订订阅。

这只是沙盒行为吗?我担心将代码投入生产时出现这个奇怪的问题。

我的完整代码与此类似 - https://www.revenuecat.com/blog/engineering/ios-in-app-subscription-tutorial-with-storekit-2-and-swift/

更新:也许这只是苹果沙盒服务器是垃圾 - 如果我一遍又一遍地按下按钮,最终会出现“确认订阅”屏幕?

ios swift xcode storekit storekit2
1个回答
0
投票

我在这个问题上苦苦挣扎了一段时间,然后就我而言,我发现它与未完成的交易有关。

请务必在您的应用程序收到订阅续订更新时完成交易。

    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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.