Ios, как решить проблему "вы уже приобрели этот товар, хотите ли вы купить его снова" с помощью аналитики firebase

Я реализовал 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

        }

    }

}

}

Посоветуйте, пожалуйста, как это реализовать. Спасибо.

Я не думаю, что это проблема Firebase. Похоже, это больше проблема того, как вы реализовали StoreKit. Не могли бы вы перефразировать свой вопрос и включить соответствующий код?

Todd Kerpelman 15.09.2018 01:09

Обновлено с помощью кода. Спасибо.

Matthew the Coder 15.09.2018 09:39
1
2
219
0

Другие вопросы по теме