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 requiredItemUnavailable- Check product availabilityNetworkError- Retry with backoffAlreadyOwned- Restore purchasesPurchaseVerificationFailed- Retry verification