iOS, как решить проблему «вы уже купили этот товар, хотите ли вы купить его снова» с помощью аналитики Firebase - PullRequest
0 голосов
/ 13 сентября 2018

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

        }

    }

}

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...