RevenueCat - 为什么我得到:错误域=SKError域代码=2 "Cannot connect to iTunes Store"



我有两个每月和每年(ios)的自动更新订阅。当我使用新的新鲜沙箱用户时,我可以购买。尽管我必须输入三次密码。这是流程:

  1. 点击订阅
  2. 输入密码
  3. 提出再次输入密码
  4. 获取"无法连接到iTunes Store"错误
  5. 再试一次并输入密码
  6. 购买成功。

继续前进,因此,一旦成功,我现在就会订阅,我的UI通过AppDelegate中的听众进行了更新,该听众发布了我订阅的通知。但是,当我尝试将订阅从每月转换为每年,反之亦然时,它总是会给我"无法连接到iTunes Store"错误。没有UI更新。这是流程:

  1. 点击其他订阅
  2. 提示输入iTunes密码
  3. 接收"确认购买"对话框,其中指出我正在修改我的订阅
  4. 点击继续
  5. 接收"您全部设置"成功警报。
  6. 解雇警报
  7. 接收"无法连接到iTunes商店"错误
  8. 我的听众没有打电话,UI未更新,等等。

但是,如果我解散错误并再次点击订阅,我会收到一个警报,即即使丢弃了错误,我的听众也没有接受更改。

我正在使用firebase。我遵循了Revenuecat文档中的Quickstart和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(购买UI):

@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")
        }
    })
}

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

升级和交叉分级在沙箱中不起作用。

在这种情况下,几乎总是返回此错误。好消息是,它在生产上工作,并正确跟踪所有情况。

,这就是所有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,我可以在需要时更新答案,并提供有关发生的事情的更多信息。

相关内容

最新更新