0

我已将自动续订订阅添加到我的 iOS 应用程序。我使用沙盒用户来测试应用程序,它运行良好。之后,我退出了以前的沙盒帐户并使用另一个沙盒帐户登录。现在我的应用程序发送带有两个原始交易 ID 的收据以从服务器进行验证。看来我之前的沙盒用户数据还没有完全消失。还有其他人遇到同样的问题吗?对此有什么想法吗?

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction: AnyObject in transactions {
        if let trans = transaction as? SKPaymentTransaction {
            switch trans.transactionState {
            case .purchased:
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                if let completion = self.purchaseProductcompletion {
                    completion(PurchaseHandlerStatus.purchased, self.productToPurchase, trans)
                }
            case .failed:
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                let errorCode = (trans.error as? SKError)?.code
                if (errorCode == .paymentCancelled) {
                    if let completion = self.purchaseProductcompletion {
                        completion(PurchaseHandlerStatus.purchaseCancelled, self.productToPurchase, trans)
                    }
                } else {
                    if let completion = self.purchaseProductcompletion {
                        completion(PurchaseHandlerStatus.purchaseFailed, self.productToPurchase, trans)
                    }
                } 
            case .restored:
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                totalRestoredPurchases += 1
            default:
                break
            }
        }
    }
}
4

1 回答 1

1

为避免这个烦人的问题,您应该完成旧沙盒帐户中的所有待处理事务。当您过于频繁地调试应用内购买和/或更改 Apple ID 时,某些交易可能会留在队列中(例如,如果您在交易完成之前中断执行)。这些交易将尝试在每次下一次应用启动时完成。在这种情况下,您可能会看到系统警报提示您输入 Apple ID 密码,这也可能导致沙盒收据不会立即更新/可能与登录的沙盒帐户不匹配。

要解决此问题,请确保在启动应用程序时完成所有待处理事务。

SKPaymentQueue.default().finishTransaction(transaction)
于 2020-05-19T10:49:48.780 回答