purchaseErrorListener

Fired when a purchase fails or is cancelled by the user.

Listener Setup

swift
// AsyncSequence approach
var purchaseErrors: AsyncStream<PurchaseError>

// Combine approach
var purchaseErrorPublisher: AnyPublisher<PurchaseError, Never>

Registers a listener for purchase error events.

swift
import OpenIap

let subscription = OpenIapModule.shared.purchaseErrorListener { error in
    Task {
        print("Purchase error: \(error.code) - \(error.message)")

        switch error.code {
        case .userCancelled:
            // User cancelled - no action needed
            break
        case .alreadyOwned:
            // Restore purchases instead
            try await OpenIapModule.shared.restorePurchases()
        case .networkError:
            showRetryDialog()
        default:
            showErrorMessage(error.message)
        }
    }
}

// Cleanup when done
OpenIapModule.shared.removeListener(subscription)

Error Payload

The error event delivers a PurchaseError object with error details. See Error Codes for complete reference.

Error Handling Strategy

Handle errors based on their error codes:

  • UserCancelled - No action required
  • ItemUnavailable - Check product availability
  • NetworkError - Retry with backoff
  • AlreadyOwned - Restore purchases
  • PurchaseVerificationFailed - Retry verification