StoreKit 2 消耗品的意外行为

发布于 2025-01-13 08:28:26 字数 232 浏览 2 评论 0原文

我正在尝试使用 StoreKit 2 实现 iAP。也许我的代码不是很优雅,但似乎可以工作;-) 但以下行为我无法理解: 如果我首先在模拟器或测试设备上启动我的应用程序,我可以购买消耗品。如果我想再次购买(消耗品应该如何工作),应用程序会自动恢复购买并且不要求购买。

这是我的测试环境中的特定行为还是我对耗材的理解错误? 由于 StoreKit 2 相当新,我还没有在互联网上找到适合我的教程。

任何提示都非常受欢迎:-)

I'm trying to implement iAP with StoreKit 2. Maybe my code isn't very elegant but seems to work ;-)
But the following behavior I can#t understand:
If I first start my app in simulator or on my test device I can bought a consumable item. If I want to buy it again (how consumables should work) the app automatically restores the purchase and don't ask for purchase.

Is this a specific behavior in my test environment or do I understand consumables wrong?
Because StoreKit 2 is quite new I haven't found a tutorial in the internet that's fits for me.

Any hints are very wellcome :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

世态炎凉 2025-01-20 08:28:26

也许我解决了我的问题。如果我是对的,可以请某人批准吗?

我将await transaction.finish()添加到我的购买()中

 func purchaseTSBooster() {
        
        self.boughtItem = true
        
        Task.init {
            guard let tsProduct = tsBoosterProducts.first else {return}
            
            do {
                let result = try await tsProduct.purchase()
                switch result {
                    
                case .success(let verification):
                    switch verification {
                        
                    case .verified(let transaction):
                        DispatchQueue.main.async {
                            self.tsBoosterID.append(transaction.productID) 
                        }
                        await transaction.finish()
                    case .unverified(_, _):
                        break
                    }
                case .userCancelled:
                    buyaborted = true
                    
                case .pending:
                    break
                @unknown default:
                    break
                }
            }
            catch {
                
                print(error)
            }
        }
    }

Maybe I solved my problem. Can please someone approve it if I'm right?

I added await transaction.finish() to my purchase()

 func purchaseTSBooster() {
        
        self.boughtItem = true
        
        Task.init {
            guard let tsProduct = tsBoosterProducts.first else {return}
            
            do {
                let result = try await tsProduct.purchase()
                switch result {
                    
                case .success(let verification):
                    switch verification {
                        
                    case .verified(let transaction):
                        DispatchQueue.main.async {
                            self.tsBoosterID.append(transaction.productID) 
                        }
                        await transaction.finish()
                    case .unverified(_, _):
                        break
                    }
                case .userCancelled:
                    buyaborted = true
                    
                case .pending:
                    break
                @unknown default:
                    break
                }
            }
            catch {
                
                print(error)
            }
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文