【发布时间】:2017-07-29 16:26:20
【问题描述】:
我已按照教程为我的游戏创建 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
}
}
}
这是正确的方法吗?
【问题讨论】:
-
您不必在每次启动应用程序时恢复购买,相反,您应该有一个恢复按钮,如果您不提供恢复按钮,苹果将不会接受您的应用程序对于非消耗性 IAP
-
我假设此恢复按钮将应用于新安装。如果用户不点击恢复按钮,这不能自动发生吗?如果我的应用程序足够聪明,可以知道该用户已经进行了购买,那么他们真的需要登录吗?这一切难道不能自动发生吗?
标签: ios swift in-app-purchase app-store