ios - 应用内购买成功后关闭按钮 - Ios - Swift - Xcode
问题描述
我试图在应用内购买后关闭一个按钮,并且一旦用户注销或关闭应用程序,它也不会再次出现。在我的代码中购买成功,但按钮仍然存在。
@IBAction func inAppPurch(_ sender: Any) {
if SKPaymentQueue.canMakePayments() {
// Can Make payments
let paymentRequest = SKMutablePayment()
paymentRequest.productIdentifier = productID
SKPaymentQueue.default().add(paymentRequest)
inAppPurch.isHidden = true
} else {
// Can't Make payments
inAppPurch.isHidden = false
print("cant make payments")
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions{
if transaction.transactionState == .purchased {
//user payment successful
print("Transaction successful!")
UserDefaults.standard.set(true, forKey: productID)
SKPaymentQueue.default().finishTransaction(transaction)
} else if transaction.transactionState == .failed {
// payment failed
if let error = transaction.error {
inAppPurch.isHidden = false
let errorDescription = error.localizedDescription
print("Transaction failed due to error: \(errorDescription)")
}
SKPaymentQueue.default().finishTransaction(transaction)
}
}
}
解决方案
您需要在您的viewDidLoad()
or viewWillAppear()
... 中获取该 bool 并使用该 bool 值停用
let id = UserDefaults.standard.bool(forKey: productID)
button.isHidden = id
默认情况下它会返回,因此当您将其设置为 true 以相应地隐藏您的按钮false
时,您的按钮不应被隐藏transaction.transactionState == .purchased
然后每次你去视图控制器它保持隐藏
如果您显示您的按钮代码...我会更好地解释它...这只是想法..您如何实现...
推荐阅读
- docker - 阻止 docker 操纵 iptables 规则的缺点是什么?
- flutter - Flutter 使用动画从集合中移除项目
- java - 无法从 java spring api 获取资源,可能是 jpa 故障
- logging - DI ILogger的正确方法
在派生类中 - azure - Azure 文件共享路径与使用 ARM 模板的容器实例卷路径映射
- wso2 - 如何获取 wso2 esb 代理参数
- linux - ssh_exchange_identification:远程主机linux服务器关闭到Mac机器的连接
- authentication - Azure SQL DB - 如何创建新的登录名、访问受限的用户?
- opam - 如何在旧的不可用版本中安装 opam 包?
- r - R(RStudio)控制台编码问题