代码之家  ›  专栏  ›  技术社区  ›  Matthew the Coder

iOS如何解决Firebase analytics的“您已经购买了此商品,是否要再次购买”问题

  •  1
  • Matthew the Coder  · 技术社区  · 6 年前

    我收到消息了 “您已经购买了此商品,是否要再次购买” 即使用户是第一次购买。

    广告最终被删除了,但上面的信息让用户感到困惑。

    SKPaymentQueue.default().add(self)
    

    在AppDelegate中的Firebase语句之前

    FirebaseApp.configure()
    

    但是如果 SKPaymentQueue.default().add(self) 这是AppDelegate类。

    2) 我发表了评论 FirebaseApp.configure() 读取之后,Firebase还添加了自己的TransactionObserver。但这也不管用。

    3) 我把 在游戏场景类中 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
    
            }
    
        }
    
    }
    

    }

    请告知如何实施。谢谢您。

    0 回复  |  直到 6 年前