在我的应用程序中,我有一家商店,希望用户在以下四个选项中进行选择:删除广告,解锁内容,购买完整的应用程序,还原。
现在,我实现了允许用户删除广告的代码:
导入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。