Я внедряю IAP в свое приложение. Когда я совершаю транзакцию в среде Sandbox, вызывается transactionState .purchasing, после чего приложение показывает мне успешную оплату, как показано на фото ниже. Однако transactionState .purchased не вызывается. Мне не удалось выполнить транзакцию.
Вот мой код:
class IAPHelper: NSObject {
// MARK: Variables
static let shared = IAPHelper()
private var productsRequest: SKProductsRequest?
private var productsRequestCompletionHandler: ProductsRequestCompletionHandler?
// MARK: Initialization
private override init() {
super.init()
SKPaymentQueue.default().add(self) //for SKPaymentTransactionObserver
clearPendingTransaction()
}
deinit {
SKPaymentQueue.default().remove(self)
}
// MARK: Functionalities
// The reason to implement and call this method here: https://stackoverflow.com/a/42790492/8120939
func clearPendingTransaction() {
for transaction in SKPaymentQueue.default().transactions {
SKPaymentQueue.default().finishTransaction(transaction)
}
}
func requestProducts(productIdentifiers: Set<ProductIdentifier>, _ completionHandler: @escaping ProductsRequestCompletionHandler) {
productsRequest?.cancel()
productsRequestCompletionHandler = completionHandler
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productsRequest!.delegate = self
productsRequest!.start()
}
public func buyProduct(_ product: SKProduct) {
print("Buying \(product.productIdentifier)...")
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
public func canMakePayments() -> Bool {
return SKPaymentQueue.canMakePayments()
}
static func restorePurchases() {
SKPaymentQueue.default().restoreCompletedTransactions()
}
}