我在我的应用上有应用内购买非消耗品,我正在使用钥匙串来保存应用内购买的状态。但是,它通过使用沙盒与我完美配合。我已经在 2 台设备和模拟器上尝试过。但是,当我的审阅者试用我的应用程序时,他可以无限制地访问在用户进行应用内购买之前不应访问的所有功能。我的问题是,审阅者是否有可能共享相同密钥的另一个应用程序并且该密钥在两个应用程序上都有效?或者可能是什么问题?
func buy(){
if SKPaymentQueue.canMakePayments() {
let transactionRequest = SKMutablePayment()
transactionRequest.productIdentifier = PurchaseID
SKPaymentQueue.default().add(transactionRequest)
}else {
print("User cannot make the trancation")
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
if transaction.transactionState == .purchased {
purchased = true
keychain.set(purchased, forKey: "purchased")
resetView()
print("transaction is successful")
}else if transaction.transactionState == .failed {
purchased = false
keychain.set(purchased, forKey: "purchased")
print("The transaction has failed")
}
}
}
检索应用内购买价值
override func viewDidLoad() {
super.viewDidLoad()
if let pur = keychain.getBool("purchased"){
purchased = pur
}
}
然后我使用购买的价值来检查它是否应该允许用户添加新列表
@IBAction func addList(_ sender: Any) {
if lists.count > 0 && purchased == false{
let alert = UIAlertController(title: transTitle, message: transMsg, preferredStyle: .alert)
let OKAction = UIAlertAction(title: transOK, style: .cancel, handler: nil)
let buyAction = UIAlertAction(title: transBuy, style: .default, handler: self.buyAlert)
alert.addAction(OKAction)
alert.addAction(buyAction)
self.present(alert, animated: true, completion: nil)
}else {
let addCatVC = children.last as! AddCategoryViewController
addCatVC.checkPur()
AddListContainer.layer.cornerRadius = 10
AddListContainer.layer.masksToBounds = true
view.addSubview(blockScreen)
blockScreen.addSubview(AddListContainer)
AddListContainer.isHidden = false
blockScreen.isHidden = false
blockScreen.alpha = 1
}
}
但是,我允许用户在购买所有功能之前只添加一个列表。此外,我将购买的价值与其他类一起使用,例如,如果用户创建一个列表,他/她在购买应用内购买之前最多只能在该列表中添加 10 个项目。它在我的设备和模拟器上完美运行,但是当 Apple 审查我的应用程序时,他们说,他们无需购买即可访问所有功能。