问题描述
我们一直在使用RevenueCat进行IAP自动续订。我们已经正确遵循了RevenueCat集成指南,并且能够通过沙盒测试仪成功测试某些设备的IAP订阅并导致某些设备失败。 IAP成功/失败的情况是50/50。
这不像沙盒测试用户的IAP失败,在生产版本中IAP也多次失败。
如果您检查我们为当前应用所做的代码实现,这将很有帮助。
AppDelegate.swift
Purchases.debugLogsEnabled = true
Purchases.configure(withAPIKey: PURCHASE_APIKEY,appUserID: UIDevice.current.identifierForvendor?.uuidString)
PremiumController
->会显示产品列表,用户可以从中选择特定的套餐并订阅该套餐。
var selectPackage: Purchases.Package? // Selected package reference - the package which is selected by user
// Listing of all offerings which will be displayed to user and user will select an offering from this list
Purchases.shared.offerings { [weak self] offerings,error in
if let pack = offerings?.current?.availablePackages {
self?.packages = pack
for i in pack {
if i.packageType == .annual {
self?.selectPackage = i
break
}
}
self?.tableView.reloadData() // Products listing
}
}
// Function to purchase the package
if let package = selectPackage {
purchasePackage(package)
}
func purchasePackage(_ package: Purchases.Package) {
if Purchases.canMakePayments() {
Purchases.shared.purchasePackage(package) { [weak self] transaction,purchaserInfo,error,userCancelled in
if let error = error {
alertError(error.localizedDescription) // Error alert will be displayed
return
}
if let info = purchaserInfo?.entitlements.all["powermove.pro"],info.isActive,let date = purchaserInfo?.latestExpirationDate {
Settings.expiresDateStr = date.toUTCSubscriptionString
dispatchQueue.main.async {
let alert = UIAlertController(title: "Success",message: nil,preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK",style: .default,handler: { action in
dispatchQueue.main.async {
self?.back() // this is kind of callback function which will be called to update UI
}
}))
self?.present(alert,animated: true)
}
}
}
}
}
我们已经调试了代码,并发现了何时
storeKitWrapper:(RCStoreKitWrapper *)storeKitWrapper updatedTransaction:(SKPaymentTransaction *)transaction
被调用,transaction.transactionState
返回为SKPaymentTransactionStateFailed
。
我们遇到错误-> “无法连接到iTunes Store” 。下面是一些日志语句。
2020-10-19 18:06:40.657001+0530 Strong Consumer[37652:7035479] [Purchases] - DEBUG: GET /v1/subscribers/069A0745-1204-4079-8D7D-D14E95211998
2020-10-19 18:06:40.657370+0530 Strong Consumer[37652:7035479] [Purchases] - DEBUG: Offerings cache is stale,updating caches
2020-10-19 18:06:40.657607+0530 Strong Consumer[37652:7035479] [Purchases] - DEBUG: GET /v1/subscribers/069A0745-1204-4079-8D7D-D14E95211998/offerings
2020-10-19 18:06:40.663777+0530 Strong Consumer[37652:7035479] [Purchases] - DEBUG: PaymentQueue removedTransaction: monthly_5.99 AB64AECB-94AD-45CA-B836-65D0D6EC6D0C ((null) Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store" UserInfo={NSLocalizedDescription=Cannot connect to iTunes Store}) {
2020-10-19 18:06:40.664062+0530 Strong Consumer[37652:7035479] [Purchases] - INFO: Subscriber attributes synced successfully
解决方法
从日志中,您将从Apple获得SKErrorUnknown
(代码0)。不幸的是,您无法在生产中解决这些问题。这可能是用户的Apple帐户有问题,或者是Apple的内部问题。
Apple文档:https://developer.apple.com/documentation/storekit/skerrorcode/skerrorunknown
,我也面临着同样的问题。似乎带有Development和Ad Hoc证书的内部版本存在此问题。我将内部版本上传到TestFlight。并且工作正常。