iOS IAP-需要有关高级版app的建议

时间:2015-02-05 04:50:30

标签: ios swift in-app-purchase app-store

我已经按照教程为我的游戏创建了一个IAP。我的目标是拥有“移除广告”按钮。用户获得此IAP后,移除广告按钮就会消失,广告也会停止显示。在将来推出应用程序时,此购买会自动加载。

我已经掌握了这个基础,但这是我的问题。

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

  2. 我也在每次推出应用时恢复购买。这似乎是在没有登录的情况下自动发生..所以为什么我要求每次登录?我是否应该使用NSUserDefaults以避免将来恢复购买?

  3. 到目前为止,这是我的代码:

    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
            }
        }
    }
    

    这是正确的方法吗?

2 个答案:

答案 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需要避免NSUserDefaultsNSUserDefaults以二进制格式存储在plist中,没有加密。如果您需要安全性,则应使用KeyChain。它编码值,是保存一些安全信息的最佳方式。