ios - 某些设备上无法进行应用内购买交易
问题描述
我一直在两台设备上测试我的应用内购买:iPhone 11 Pro 和 iPad Air(均为 IOS 13)。在 iPad 上,当我尝试购买应用内购买时,我会被要求输入我的 Apple ID 和密码,但当我尝试在手机上购买时,什么也没有发生。两台设备都使用相同的沙盒帐户。关于为什么会发生这种情况的任何想法?
这是我的应用内购买的代码:
var product: SKProduct?
override func viewDidLoad() {
super.viewDidLoad()
buyButton.isEnabled = false
buyButton.alpha = 0.5
if UserDefaults.standard.bool(forKey: "isUnlimited") == false {
SKPaymentQueue.default().add(self)
getPurchaseInfo(productIDs: [productID])
}
}
@IBAction func buy() {
let payment = SKPayment(product: product!)
SKPaymentQueue.default().add(payment)
}
func getPurchaseInfo(productIDs: [String]) {
if SKPaymentQueue.canMakePayments() {
let request = SKProductsRequest(productIdentifiers: Set(productIDs))
request.delegate = self
request.start()
}
else {
DispatchQueue.main.async {
let alert = UIAlertController(title: "In-App Purchases Not Enabled", message: "Please enable In-App Purchases in your settings.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
self.present(alert, animated: true)
}
}
}
// checks if product exists:
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
let products = response.products
if products.count != 0 {
product = products[0]
DispatchQueue.main.async {
self.buyButton.isEnabled = true
self.buyButton.alpha = 1
}
}
else {
DispatchQueue.main.async {
let alert = UIAlertController(title: "Product Not Found", message: "Please make sure that you are connected to the Internet.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
self.present(alert, animated: true)
}
}
let invalids = response.invalidProductIdentifiers
for product in invalids {
print("product not found: \(product)")
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case SKPaymentTransactionState.purchased:
SKPaymentQueue.default().finishTransaction(transaction)
self.unlockPurchase()
DispatchQueue.main.async {
self.buyButton.isEnabled = false
self.buyButton.alpha = 0.5
let alert = UIAlertController(title: "Thank You For Your Purchase!", message: "The Unlimited Access Pass has successfully been bought.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
self.present(alert, animated: true)
}
case SKPaymentTransactionState.failed:
SKPaymentQueue.default().finishTransaction(transaction)
default:
break
}
}
}
func unlockPurchase() {
UserDefaults.standard.set(true, forKey: "isUnlimited")
}
解决方案
推荐阅读
- php - Nginx 和 PHP:没有写权限
- r - Knime R 片段节点错误:下标超出范围
- angular - pnp.js - 使用 camlquery 加入 2 个共享点列表
- android - kotlin - 过滤 MutableList 并在列表末尾附加其他项目
- c - 为什么将矩阵传递给函数时出现编译错误
- python - 使用 python statsmodels 修复 summary_col 中的标签外生变量
- python - 如何在 Python 中重命名行?
- scala - Scala中的协变安全转换
- r - Shiny - 不同标签集上的 rintrojs
- python - 按最近的坐标合并数据框