【问题标题】:Swift inapp purchase fails but system dialog say you're all setSwift 应用内购买失败,但系统对话框显示您已准备就绪
【发布时间】:2019-03-14 08:54:38
【问题描述】:

我有一个具有应用内购买功能的应用。问题是即使我收到错误,例如由于“无法连接到 iTunes Store”而导致的失败案例,系统对话框会显示“您已设置完毕。您的购买成功”。您可以在下面找到我的 inApp 购买助手类代码。

  public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        switch (transaction.transactionState) {
        case .purchased:
            NotificationCenter.default.post(name: .IAPHelperSetPepqueenNotification, object: nil)

            if let url = Bundle.main.appStoreReceiptURL {
                guard let receipt = try? Data(contentsOf: url) else {
                    print("error to take receipt")
                    return
                }
                let receiptData: String = receipt.base64EncodedString(options: .init(rawValue: 0))
                PepappNetwork.request(target: .postReceipt(platform: "ios", receipt: receiptData) , success: { (JSON) in
                    print(JSON)
                    let user = User(JSON: JSON["data"].dictionaryObject!)
                    UserDefaults.standard.set(user?.identifier, forKey: "userID")
                    user?.persist()

                    if user?.language != nil {
                        UserDefaults.standard.set(user!.language!, forKey: "forcedLanguage")
                        UserDefaults(suiteName: Constants.UserDefaults.containerName)!.set(user!.language!, forKey: "forcedLanguage")
                    }

                    NotificationCenter.default.post(name: Notification.Name.CurrentUserChanged, object: nil)
                    self.complete(transaction: transaction)

                }, error: { (errorString, _) in

                }) { (MoyaError) in

                }
            }
            break
        case .failed:
            NotificationCenter.default.post(name: .IAPHelperCancelNotification, object: nil)
            fail(transaction: transaction)
            break
        case .restored:
            restore(transaction: transaction)
            break
        case .deferred:
            break
        case .purchasing:
            break
        }
    }
}

交易失败函数

private func fail(transaction: SKPaymentTransaction) {
    print("fail...")
    if let transactionError = transaction.error as NSError?,
        let localizedDescription = transaction.error?.localizedDescription,
        transactionError.code != SKError.paymentCancelled.rawValue {
        print("Transaction Error: \(localizedDescription)")

    }

在应用程序进入更新交易功能之前,“一切就绪”。对话框已显示。

【问题讨论】:

标签: ios swift in-app-purchase


【解决方案1】:

Apple 沙盒出现问题,现已解决 - https://developer.apple.com/system-status/

【讨论】:

    【解决方案2】:

    似乎这是最近的 Apple 错误。我今天开始体验它,它在使用沙盒帐户进行购买时出现。 但是,如果您将应用上传到 TestFlight,应用内购买仍然有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2015-07-01
      • 2019-10-28
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多