RevenueCat-我为什么得到:错误域= SKErrorDomain代码= 2“无法连接到iTunes Store”

时间:2019-03-02 09:29:41

标签: ios swift in-app-purchase revenuecat

我有两个自动续订的订阅,分别是每月和每年(iOS)。当我使用新的新沙盒用户时可以购买。尽管我必须输入三次密码。流程如下:

  1. 点击订阅
  2. 输入密码
  3. 提示再次输入密码
  4. 收到“无法连接到iTunes Store”错误
  5. 重试并输入密码
  6. 购买成功。

继续前进,一旦成功,就可以订阅我的UI,并通过appDelegate中的侦听器更新我的UI,该监听器发布我订阅的通知。但是,当我尝试将订阅从每月切换到每年,反之亦然时,总是出现“无法连接到iTunes Store”错误。没有用户界面更新。流程如下:

  1. 点击其他订阅
  2. 提示输入iTunes密码
  3. 收到“确认购买”对话框,提示我正在修改我的订阅
  4. 点击继续
  5. 接收“一切就绪”成功警报。
  6. 关闭提醒
  7. 收到“无法连接到iTunes Store”错误
  8. 未调用我的侦听器,未更新UI等。

但是,如果我消除了错误并再次点击订阅,我会收到一条警报,提示我已经订阅了该计划,即使抛出了错误并且我的听众也没有接受更改。

我正在使用Firebase。我遵循了RevenueCat文档中的快速入门和Firebase特定说明。我所有的调试日志似乎都很好,没有非200状态,没有无效的产品ID。以下是一些代码段:

AppDelegate:

Purchases.debugLogsEnabled = true
Purchases.configure(withAPIKey: Constants.revenueCatKey)
Purchases.shared.delegate = self

FirebaseApp.configure()

authHandle = Auth.auth().addStateDidChangeListener() { (auth, user) in

        if let uid = user?.uid {

            Purchases.shared.identify(uid, { (info, error) in
                if let e = error {
                    print("sign in error: \(e.localizedDescription)")
                } else {
                    print("User \(uid) signed in")
                }
            })
          }
            ...
        }
    }

extension AppDelegate: PurchasesDelegate {

    func purchases(_ purchases: Purchases, didReceiveUpdated purchaserInfo: PurchaserInfo) {

        if self.currentUser != nil {

            if purchaserInfo.activeSubscriptions.contains(Constants.audiomeshSubscriptions.monthly) {
                guard let myRef = DataService.instance.REF_PRIVATE else { return }
                myRef.updateData(["plan" : "paidMonthly"]) { err in
                    if let err = err {
                        print("error updating user-private with new subscription: \(err)")
                    } else {

                        NotificationCenter.default.post(name: Notification.Name(rawValue: "purchaserInfoUpdated"), object: nil)
                    }
                }


            }
            else if purchaserInfo.activeSubscriptions.contains(Constants.audiomeshSubscriptions.yearly) {
                //do the same for yearly subscription

            }
            else {
                 //handle non-paying users here
            }
        } 
    }
}

UpgradeController(购买界面)

@objc func purchaseButtonSelected(sender: AudiomeshButton) {
    let buttonTag = sender.tag
    guard let option = options?[buttonTag] else { return }

    let product:SKProduct = option.product

    Purchases.shared.makePurchase(product, { (transaction, purchaserInfo, error) in

        if let error = error {
            print("error making purchase: \(error)")

        } else {
                print("Purchase Successful")
        }
    })
}

2 个答案:

答案 0 :(得分:4)

这就是针对所有SKError引发的通用NSError消息。错误代码2为“付款已取消”。但是,这也是 当您已经订阅项目时抛出的错误。

您确定要让年度订阅过期,然后再尝试重新订阅吗?使用年度订阅,订阅将在到期前每小时续约6次。

要查看特定的SKError,您将执行以下操作:

if let error = error as? SKError  {
                print("SKError - ")
                switch error.code {  // https://developer.apple.com/reference/storekit/skerror.code
                case .unknown:
                    print("unknown error")
                case .paymentCancelled:
                    print("cancelled error")
                case .clientInvalid:
                    print("client invalid")
                case .paymentInvalid:
                    print("payment invalid")
                case .paymentNotAllowed:
                    print("payment not allowed")
                case .cloudServiceNetworkConnectionFailed:
                    print("cloud service network connection failed")
                case .cloudServicePermissionDenied:
                    print("cloud service permission denied")
                case .storeProductNotAvailable:
                    print("store product not available")
                case .cloudServiceRevoked:
                    print("cloud service revoked")
                }
            }

一旦您知道要返回的SKError,我就可以根据需要更新我的答案,并提供有关可能发生的情况的更多信息。

答案 1 :(得分:4)

因此,这个答案实际上相对容易回答,但是答案却并不令人满意。

升级和跨版本在沙盒中不起作用。

在这种情况下,几乎总是返回此错误。好消息是它可以在生产环境中运行,RevenueCat可以正确跟踪所有情况。

相关问题