【问题标题】:Switching sandbox user to test Auto Renewable Subscription iOS切换沙盒用户以测试 Auto Renewable Subscription iOS
【发布时间】:2020-09-05 08:57:48
【问题描述】:

我已将自动续订订阅添加到我的 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
            }
        }
    }
}

【问题讨论】:

    标签: ios swift in-app-purchase subscription auto-renewable


    【解决方案1】:

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

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

    SKPaymentQueue.default().finishTransaction(transaction)
    

    【讨论】:

    • 非常感谢您的澄清。我已经完成了处于 .purchased、.failed 和 .restored 状态的交易。似乎我有一笔交易处于 .purchasing 状态,这会导致麻烦。那应该怎么处理? (我已经用我的代码编辑了我的问题)
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2015-01-12
    相关资源
    最近更新 更多