В настоящее время я пытаюсь внедрить кнопку «Восстановить покупку» в моем непотребляемом продукте при покупке приложения. Однако, хотя кнопка «Восстановить покупку» работает правильно (восстанавливает прошлую покупку пользователя), приложение также выдает пользователю предупреждение «Подтвердите покупку в приложении». Этот тип оповещения не должен появляться во время покупки для восстановления и должен появляться только во время реальной покупки. Снимок экрана предупреждения «Подтвердите покупку»
Обратите внимание, что пользователь может нажать «Отмена» в предупреждении «Подтвердить покупку», и покупка по-прежнему будет восстановлена .
Ниже приведен код, который я использую:
class RemoveAdsViewController: UIViewController, SKPaymentTransactionObserver, SKProductsRequestDelegate {
@IBOutlet weak var removeAdsButton: UIButton!
@IBOutlet weak var restorePurchaseButton: UIButton!
var product: SKProduct?
var productID = "<INSERT_PRODUCT_ID>"
@IBAction func removeAds(_ sender: Any) {
let paymentRequest = SKMutablePayment()
paymentRequest.productIdentifier = productID
SKPaymentQueue.default().add(paymentRequest)
}
@IBAction func restorePurchase(_ sender: Any) {
SKPaymentQueue.default().restoreCompletedTransactions()
}
override func viewDidLoad() {
super.viewDidLoad()
removeAdsButton.isEnabled = false
restorePurchaseButton.isHidden = true
if (!removedAds) {
removeAdsButton.setTitle("Connecting to App Store...", for: .normal)
removeAdsButton.titleLabel?.font = removeAdsButton.titleLabel?.font.withSize(20)
SKPaymentQueue.default().add(self)
getPuchaseInfo()
} else {
removeAdsButton.setTitle("Purchased", for: .normal)
}
}
func getPuchaseInfo() {
if SKPaymentQueue.canMakePayments() {
let request = SKProductsRequest(productIdentifiers: NSSet(object: self.productID) as! Set<String>)
request.delegate = self
request.start()
} else {
removeAdsButton.setTitle("Purchase Disabled", for: .normal)
}
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
let products = response.products
if (products.count == 0) {
DispatchQueue.main.async {
self.removeAdsButton.setTitle("Purchase Not Found", for: .normal)
}
} else {
product = products[0]
DispatchQueue.main.async {
self.removeAdsButton.isEnabled = true
self.restorePurchaseButton.isHidden = false
self.removeAdsButton.setTitle("Remove Ads (\(self.product!.localizedPrice))", for: .normal)
self.removeAdsButton.titleLabel?.font = self.removeAdsButton.titleLabel?.font.withSize(28)
}
}
let invalids = response.invalidProductIdentifiers
for product in invalids {
print("product not found: \(product)")
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case SKPaymentTransactionState.purchased:
//user purchased remove ads
SKPaymentQueue.default().finishTransaction(transaction)
removeAdsButton.setTitle("Purchased", for: .normal)
removeAdsButton.isEnabled = false
restorePurchaseButton.isHidden = true
removedAds = true
UserDefaults.standard.set(true, forKey: "removedAds")
case SKPaymentTransactionState.restored:
//user restored purchase
SKPaymentQueue.default().finishTransaction(transaction)
removeAdsButton.setTitle("Purchased", for: .normal)
removeAdsButton.isEnabled = false
restorePurchaseButton.isHidden = true
removedAds = true
UserDefaults.standard.set(true, forKey: "removedAds")
case SKPaymentTransactionState.failed:
SKPaymentQueue.default().finishTransaction(transaction)
default:
break
}
}
}
}
extension SKProduct {
var localizedPrice: String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = priceLocale
return formatter.string(from: price)!
}
}
Как мне сделать так, чтобы во время покупки с восстановлением не появлялось предупреждение «Подтвердите покупку в приложении»