Я пытаюсь реализовать покупку внутри приложения в моем приложении, но она не работает так, как я хочу. Я просто запускаю тест, и что происходит, когда я нажимаю upgradeButton
, меня просят ввести мой пароль (и он говорит, что это режим песочницы). Когда я нажимаю OK и жду несколько секунд, он говорит, что я уже купил это, и получу это бесплатно. Когда я нажимаю кнопку ОК, ничего не происходит. upgradeLabel
просто говорит PLEASE WAIT...
Даже журнал YAY
из unlockProFeatures
не отображается, поэтому похоже, что unlockProFeatures
не запускается.
Пожалуйста, помогите. Кто-нибудь знает, что не так? Вот мой полный InfoViewController.swift
код:
import UIKit
import StoreKit
class InfoViewController: UIViewController, SKPaymentTransactionObserver, SKProductsRequestDelegate {
var pro = UserDefaults.standard.bool(forKey: "isUpgraded")
@IBOutlet var upgradeLabel: UILabel!
@IBOutlet var upgradeButton: UIButton!
@IBOutlet var restorebutton: UIButton!
var productID = "com.myID.Upgrade"
var productsRequest:SKProductsRequest = SKProductsRequest()
override func viewDidLoad() {
super.viewDidLoad()
// Setup UIView:
if pro {
upgradeButton.isEnabled = false
restorebutton.isHidden = true
upgradeLabel.text = NSLocalizedString("SUBSCRIPTION: PREMIUM", comment: "")
} else {
upgradeButton.isEnabled = true
upgradeLabel.text = NSLocalizedString("UPGRADE TO PREMIUM", comment: "")
// In App Purchase:
print("IAP: Loading...")
upgradeButton.isEnabled = false
self.configureIAP()
}
}
@IBAction func upgradeButtonAction(_ sender: Any) { // Purchase button
print("Upgrade button tapped")
upgradeButton.isEnabled = false
if SKPaymentQueue.canMakePayments() {
print("canMakePayments")
SKPaymentQueue.default().add(self)
let paymentRequest = SKMutablePayment()
paymentRequest.productIdentifier = productID
SKPaymentQueue.default().add(paymentRequest)
upgradeButton.isEnabled = false
upgradeLabel.text = NSLocalizedString("PLEASE WAIT...", comment: "")
} else {
print("User unable to make payments")
upgradeButton.isEnabled = true
}
}
@IBAction func restoreButton(_ sender: Any) {
print("Restore")
SKPaymentQueue.default().restoreCompletedTransactions()
}
func configureIAP() {
// Set IAPS
if(SKPaymentQueue.canMakePayments()) {
print("IAP is enabled, loading")
let productIDSet:NSSet = NSSet(objects: "com.myID.Upgrade")
productsRequest = SKProductsRequest(productIdentifiers: productIDSet as! Set<String>)
productsRequest.delegate = self
productsRequest.start()
upgradeButton.isEnabled = true
} else {
print("please enable IAPS")
}
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print("product request")
let myProduct = response.products
for product in myProduct {
print("product added")
print(product.productIdentifier)
print(product.localizedTitle)
print(product.localizedDescription)
//println(product.price)
//list.append(product )
DispatchQueue.main.async {
self.upgradeButton.isEnabled = true
}
print("Upgrade now! (" + product.localizedPrice() + ")")
}
}
func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
print("REMOVED")
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
if transaction.transactionState == .purchased {
//if item has been purchased
print("Transaction Successful")
creditsLabel.text = "Purchase Completed!"
self.unlockProFeatures()
} else if transaction.transactionState == .failed {
print("Transaction Failed: \(String(describing: transaction.error))")
upgradeButton.isEnabled = true
upgradeLabel.text = NSLocalizedString("UPGRADE TO PREMIUM", comment: "")
// create the alert
let alert = UIAlertController(title: nil, message: transaction.error?.localizedDescription, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
} else if transaction.transactionState == .restored {
print("Transaction Restored")
creditsLabel.text = "Purchase Restored!"
self.unlockProFeatures()
} else if transaction.transactionState == .purchasing {
print("purchasing")
} else if transaction.transactionState == .deferred {
print("deferred")
}
}
}
func unlockProFeatures(){
print("YAY")
UserDefaults.standard.set(true, forKey: "isUpgraded")
upgradeLabel.text = NSLocalizedString("SUBSCRIPTION: PREMIUM", comment: "")
}
}