Swift IAPManager SKPaymentTransactionObserver не вызывается - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь добавить In App Purchase в свое приложение. Я смог загрузить продукты, отобразить и протестировать их на устройстве. Когда я выбираю вариант покупки, я получаю предупреждения о том, что нужно ввести свои учетные данные и подтвердить покупку в среде песочницы [снимки экрана ниже]. Но у меня нет дисплеев для метода paymentQueue в моей консоли. Может ли кто-нибудь сообщить мне, что мне здесь не хватает. ниже несколько строк из кода:

Спасибо.

import UIKit
import StoreKit

class testing: NSObject {

    private var productIds : Set<String> = []
    @objc private(set) var productsArray = [SKProduct]()

    func getProducts() {

        productIds = ["xxxxx", "yyyyy"]
        let request = SKProductsRequest(productIdentifiers: productIds)
        request.delegate = self
        request.start()
    }

    func purchase(product: String) {

        guard SKPaymentQueue.canMakePayments() else {
            return
        }

        guard SKPaymentQueue.default().transactions.last?.transactionState != .purchasing else {
            return
        }

        guard let productToPurchase = productsArray.filter({$0.productIdentifier == product}).first else {return}

        print(productToPurchase.localizedTitle)
        let payment = SKPayment(product: productToPurchase)
        SKPaymentQueue.default().add(payment)

    }

    func restorePurchases(){
        print("calling restore purchases")
        SKPaymentQueue.default().restoreCompletedTransactions()
    }

}

extension testing: SKProductsRequestDelegate {


    public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {

        productsArray = response.products
    }
}

extension testing: SKPaymentTransactionObserver {



    public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

        print("inside here....")
        for transaction in transactions {
            switch (transaction.transactionState) {
            case .purchased:
                SKPaymentQueue.default().finishTransaction(transaction)
                print ("purchased")
                //notifyIsPurchased(transaction: transaction)
                break
            case .failed:
                SKPaymentQueue.default().finishTransaction(transaction)
                print("purchase error : \(transaction.error?.localizedDescription ?? "")")
                //self.failureBlock?(transaction.error)
                //cleanUp()
                break
            case .restored:
                SKPaymentQueue.default().finishTransaction(transaction)
                //notifyIsPurchased(transaction: transaction)
                print("restored")
                break
            case .deferred:
                print("defered")
                break
            case .purchasing:
                print("purchasing")
                break
            default:
                break
            }
        }
    }
}

Enter Sandbox Credentials Confirm Purchase Purchase Success

...