【问题标题】:iOS IAP- need advice on premium version of appiOS IAP - 需要有关高级版应用程序的建议
【发布时间】:2017-07-29 16:26:20
【问题描述】:

我已按照教程为我的游戏创建 IAP。我的目标是有一个“删除广告”按钮。一旦用户获得此 IAP,删除广告按钮就会消失,广告也会停止展示。在未来启动应用程序时,会自动加载此购买。

我已经掌握了这方面的基础知识,但这是我的问题。

  1. 我创建了一个沙盒用户,每次启动我的应用程序时,它都会要求我登录 iTunes。我认为它应该只在我决定购买该应用程序时才要求我登录。这与我是沙盒用户有关吗?

  2. 我还在每次应用启动时恢复购买。这似乎是在没有登录的情况下自动发生的。那么为什么我每次都要求登录?我应该使用 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


【解决方案1】:

1) 是的,登录请求与沙盒用户有关

2) 您应该每次都检查收据,而不是恢复购买或存储单独的本地购买清单。请参阅 Apple 的收据验证编程指南:https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573-CH105-SW1

恢复购买应该是用户发起的操作,使用专用 UI​​(商店中某处的恢复按钮)与检查是否已进行购买分开。

【讨论】:

  • 这是很棒的信息。尽管我喜欢阅读文档,但一些简单的例子会很棒!
【解决方案2】:

我应该使用 NSUserDefaults 来避免将来恢复购买吗?

您需要避免使用 NSUserDefaults 进行 IAP。 NSUserDefaults 以二进制格式存储在 plist 中,没有加密。如果您需要安全性,您应该使用 KeyChain。它对值进行编码,是保存一些安全信息的最佳方式。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多