sha*_*aut 2 in-app-purchase ios swift revenuecat
我有两个自动续订的订阅,分别是每月和每年(iOS)。当我使用新的新沙盒用户时可以购买。尽管我必须输入三次密码。流程如下:
继续前进,一旦成功,我现在就订阅了,并通过appDelegate中的侦听器更新了我的UI,该侦听器发布了我订阅的通知。但是,当我尝试将订阅从每月切换到每年,反之亦然时,总是出现“无法连接到iTunes Store”错误。没有用户界面更新。流程如下:
但是,如果我消除了错误并再次点击订阅,我会收到一条警报,说我已经订阅了该计划,即使抛出了错误并且我的听众也没有接受更改。
我正在使用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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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")
}
})
}
Run Code Online (Sandbox Code Playgroud)
因此,这个答案实际上相对容易回答,但答案却并不令人满意。
升级和跨版本在沙盒中不起作用。
在这种情况下,几乎总是返回此错误。好消息是它可以在生产环境上运行,并且RevenueCat可以正确跟踪所有情况。
这就是所有 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")
}
}
Run Code Online (Sandbox Code Playgroud)
一旦您知道返回的 SKError ,我可以根据需要更新我的答案,并提供有关可能发生的情况的更多信息。
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |