我已经按照教程为我的游戏创建了一个IAP。我的目标是拥有“移除广告”按钮。用户获得此IAP后,移除广告按钮就会消失,广告也会停止显示。在将来推出应用程序时,此购买会自动加载。
我已经掌握了这个基础,但这是我的问题。
我创建了一个沙盒用户,每次启动我的应用程序时都要求我登录itunes。在我决定购买应用程序时,我认为应该只是要求我登录。这与我是沙盒用户有关吗?
我也在每次推出应用时恢复购买。这似乎是在没有登录的情况下自动发生..所以为什么我要求每次登录?我是否应该使用NSUserDefaults以避免将来恢复购买?
到目前为止,这是我的代码:
override func viewDidLoad() {
// storekit delegation
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
self.getProductInfo()
}
func getProductInfo(){
if SKPaymentQueue.canMakePayments() {
let request = SKProductsRequest(productIdentifiers: NSSet(object: self.productID))
request.delegate = self
request.start()
}
// else {
// please enable in app purchases
// }
}
委派方法
func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
var products = response.products
if products.count != 0 {
self.product = products[0] as? SKProduct
}
}
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue!) {
if queue.transactions.count != 0 {
if let purchase = queue.transactions[0] as? SKPaymentTransaction {
if purchase.payment.productIdentifier == self.productID {
println("you bought it already")
}
}
}
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
for transaction in transactions as [SKPaymentTransaction] {
switch transaction.transactionState {
case SKPaymentTransactionState.Purchased:
// self.unlockFeature()
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
case SKPaymentTransactionState.Failed:
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
default:
break
}
}
}
这是正确的方法吗?
答案 0 :(得分:1)
1)是的,登录请求与沙箱用户
相关2)您应该每次检查收据,而不是恢复购买或存储单独的本地购买清单。请参阅Apple的收据验证编程指南:https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573-CH105-SW1
恢复购买应该是用户启动的操作,具有专用UI(商店中的恢复按钮),与检查是否已进行购买分开。
答案 1 :(得分:0)
我是否应该使用NSUserDefaults以避免将来恢复购买?
IAP需要避免NSUserDefaults
。 NSUserDefaults
以二进制格式存储在plist中,没有加密。如果您需要安全性,则应使用KeyChain。它编码值,是保存一些安全信息的最佳方式。