如何在应用程序中提供多种非消耗品

时间:2019-05-10 15:36:40

标签: ios swift uiview in-app-purchase

在我的应用程序中,我有一家商店,希望用户在以下四个选项中进行选择:删除广告,解锁内容,购买完整的应用程序,还原。

现在,我实现了允许用户删除广告的代码:

导入UIKit 导入StoreKit

let PurchaseKey =“ PurchaseKey”

ShopViewController类:UIViewController,SKPaymentTransactionObserver,SKProductsRequestDelegate,GADBannerViewDelegate {

//MARK: - Outlets
@IBOutlet weak var removeAdsOutlet: UIButton!
@IBOutlet weak var unlockContentsOutlet: UIButton!
@IBOutlet weak var buyFullAppOutlet: UIButton!
@IBOutlet weak var restorePurchasesOutlet: UIButton!

@IBOutlet weak var removeAdsText: UILabel!
@IBOutlet weak var unlockContentText: UILabel!
@IBOutlet weak var buyFullAppText: UILabel!

//MARK: - var & let
var product: SKProduct?
var productID = “myproductID”

let defaults = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()

    removeAdsOutlet.isEnabled = false
    unlockContentsOutlet.isEnabled = false
    buyFullAppOutlet.isEnabled = false
    restorePurchasesOutlet.isEnabled = false

    SKPaymentQueue.default().add(self)
    getPurchaseInfo()
}


//MARK: - Functions
func getPurchaseInfo() {
    if SKPaymentQueue.canMakePayments() {
        let request = SKProductsRequest(productIdentifiers: NSSet(objects: self.productID) as! Set<String>)
        request.delegate = self
        request.start()
    } else {
        removeAdsText.text = "Warning! You Have to allow In App Purchases in order to buy contents"
        //Altri
    }
}

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {

        switch transaction.transactionState {
            case SKPaymentTransactionState.purchased:
                SKPaymentQueue.default().finishTransaction(transaction)
                removeAdsText.text = "Thank you for purchasing this product!"
                removeAdsOutlet.isEnabled = false
                defaults.set(true, forKey: purchaseKey)
                defaults.synchronize()


            case SKPaymentTransactionState.restored: 
                SKPaymentQueue.default().finishTransaction(transaction)

                removeAdsText.text = "Thank you for purchasing this product!"
                removeAdsOutlet.isEnabled = false
                defaults.set(true, forKey: purchaseKey)
                defaults.synchronize()

            case SKPaymentTransactionState.failed: SKPaymentQueue.default().finishTransaction(transaction)
                removeAdsText.text = "The product hasn't been purchased"


            default:
                break
        }
    }
}

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
    var products = response.products
    if (products.count == 0 ) {
        removeAdsText.text = "Product not found!"

    } else {
        product = products[0]
        removeAdsText.text = product!.localizedTitle
        //Description ?? removeAdsDescription.text = product!.localizedDescription
    }
    let invalids = response.invalidProductIdentifiers
    for product in invalids {
        print ("product not found: \(product)")
    }
}


 @IBAction func removeAdds(_ sender: Any) {
     let payment = SKPayment(product: product!)
     SKPaymentQueue.default().add(payment)
}

这很好。但是,如果我希望用户解锁内容或购买完整的应用程序怎么办?我应该在哪里实现代码?我曾想创建一个我提供的产品数组,而不是变量var productID,但我不知道如何在函数内部实现代码。

ps。如果用户购买应用程序/解锁内容,我需要做的就是将视图隐藏在另一个vc中:

MainViewController类:UIViewController {

@IBOutlet weak var view1: UIView!
@IBOutlet weak var view2: UIView!

 override func viewDidLoad() {
     super.viewDidLoad()
     view1.isHidden = false
     view2.isHidden = true
 }

} 因此,购买后,用户将不再看到view1,而是看到了view2。

0 个答案:

没有答案