在我的应用中,用户可以进行两次不同的购买。
这是我的paymentQueue函数:
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("Received Payment Transaction Response from Apple")
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction {
switch trans.transactionState {
case .Purchased, . Restored:
print("Product Purchased / Restored")
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
// TO DO
if selectedProduct == "product1" {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product1Purchased")
} else if selectedProduct == "product2" {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product2Purchased")
}
case .Failed:
print("Purchased Failed")
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break
default:
break
}
}
}
}
我创建了一个名为selectedProduct
的变量来检测用户选择的产品。如果他点击按钮购买第一个产品,变量selectedProduct
将保留值“product1”。
问题是,当用户单击“恢复购买”按钮时,应用程序会检查所选产品是“product1”还是“product2”,但如果用户单击“Restore Purchases”按钮,则selectedProduct
没有值,所以没有任何事情发生。
我该怎么办?
答案 0 :(得分:1)
请勿使用selectedProduct
等变量来确定购买或恢复的产品。在SKPaymentTransaction
内查找所需信息。
case .Purchased, . Restored:
print("Product Purchased / Restored")
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
if trans.payment.productIdentifier == "product1" {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product1Purchased")
} else if trans.payment.productIdentifier == "product2" {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product2Purchased")
}
根据实际产品ID的需要进行调整。