Я реализовал Google admob с интеграцией Firebase для аналитики. Я хочу, чтобы пользователь заплатил, чтобы удалить рекламу. Код для этого работает, но некоторые проблемы.
Я получаю сообщение «Вы уже купили этот товар, хотите ли вы купить его снова» , даже если пользователь приобретает его впервые.
Возможно, со временем объявления были удалены, но приведенное выше сообщение сбивает с толку пользователя.
1) Я прочитал в Интернете, что проблема может быть решена, если я добавлю этот код
SKPaymentQueue.default().add(self)
перед оператором Firebase в AppDelegate
FirebaseApp.configure()
Но я не могу скомпилировать код, если SKPaymentQueue.default().add(self)
это класс AppDelegate.
2) Я прокомментировал FirebaseApp.configure()
после прочтения, что Firebase также добавил свой собственный TransactionObserver. Но это тоже не сработало.
3) Я поместил SKPaymentQueue.default().add(self)
в класс GameScene в функции sceneDidLoad()
, но это не решило проблему.
4) У меня есть queue.finishTransaction(transaction)
в функции func paymentQueue для каждого из состояний SKPaymentTransactionState .
Обновление с кодом, используемым в приложении песочницы:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
btnRemoveBannerAds.isEnabled = false
SKPaymentQueue.default().add(self)
getPurchaseInfo()
}
@IBAction func removeBannerAds(_ sender: UIButton) {
let skPayment = SKPayment(product: skProduct!)
SKPaymentQueue.default().add(skPayment)
}
extension PurchaseViewController : SKPaymentTransactionObserver, SKProductsRequestDelegate {
func getPurchaseInfo() {
if SKPaymentQueue.canMakePayments() {
let request = SKProductsRequest(productIdentifiers: NSSet(objects: self.productID) as! Set<String>) // dont understand this?
request.delegate = self
request.start()
} else {
print("In App purchase not enabled")
}
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
var products = response.products
if products.count == 0 {
print("Product not found")
} else {
skProduct = products[0]
print("product is \(String(describing: skProduct))")
btnRemoveBannerAds.isEnabled = true
}
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:
SKPaymentQueue.default().finishTransaction(transaction)
btnRemoveBannerAds.isEnabled = false
userPref.setValue(true, forKey: "AdRemovalPurchase")
userPref.synchronize()
case SKPaymentTransactionState.restored:
SKPaymentQueue.default().finishTransaction(transaction)
btnRemoveBannerAds.isEnabled = false
userPref.setValue(true, forKey: "AdRemovalPurchase")
userPref.synchronize()
case SKPaymentTransactionState.failed:
SKPaymentQueue.default().finishTransaction(transaction)
btnRemoveBannerAds.isEnabled = false
default:
break
}
}
}
}
Посоветуйте, пожалуйста, как это реализовать. Спасибо.