Skip to main content

Release 14.3.0

· 3 min read
Hyo
React Native IAP Maintainer

This release consolidates the 14.3.x patch series with comprehensive improvements across Android, iOS, documentation, examples, and ecosystem alignment.

Breaking Changes ⚡️

useIAP now expects callers to lean on the supplied callbacks instead of the temporary currentPurchase helpers.

Added

  • getStorefront(): returns the current storefront country code.
  • deepLinkToSubscriptions(): opens the native subscription management UI (Android/iOS).
  • Examples: "Manage Subscriptions" buttons in SubscriptionFlow and AvailablePurchases (opens native subscription management cross‑platform)
  • Examples: Tap a purchased item to open a details modal

Changed

Android & iOS Platform Updates

  • Android: migrate to OpenIAP Google 1.1.0; align init and field mapping with spec.
  • Upgrade the fallback/config plugin to openiap-google 1.1.10 so Android builds pick up the latest Billing configuration fixes.
  • Bump the iOS pod to openiap 1.1.12 and switch native error codes to PascalCase to match the shared TypeScript surface.

JavaScript & Bridge Improvements

  • JS: Treat requestPurchase/requestSubscription separately, warn in development when the wrong payload is supplied, and drop the legacy request fallback.
  • JS: Normalize native error codes (including the Android "canceled" spelling) and keep init connection failures suppressed until the store is ready.
  • Bridge: Warn when the iOS product type is unrecognized and align Active Subscription expiration fields with the generated schema.
  • Removed the currentPurchase / currentPurchaseError state from useIAP and route purchase outcomes through onPurchaseSuccess / onPurchaseError.
  • Trimmed the duplicate-event guard and logs so the hook focuses on forwarding results and refreshing subscription snapshots.

Documentation & Examples

  • Docs: Clarify event‑driven purchase model (requests don't resolve with results); add FAQ about transient iOS success→error timing and simple debounce guidance
  • Docs/Examples: Prefer purchase.id; continue using purchaseToken for server validation
  • Examples: Redact sensitive fields in logs and modals (no raw transactionReceipt or full purchaseToken)
  • Docs: Restore installation note and remove a local Docusaurus type shim to avoid duplicate identifiers.

Nitro & Plugin Enhancements

  • Plugin: Re‑add opt‑in "with-folly-no-couroutines": true to inject Folly defines in the Podfile.
  • GraphQL: Bump to openiap-gql 1.0.0 so the generated schema stays in sync with the published contract.

Fixed

  • Android: address a potential init race and improve error propagation.
  • iOS: add temporary stubs to keep Nitro/iOS aligned with the JS spec.
  • iOS: Sanitize purchase error payload so product identifiers don't appear in purchaseToken on error events; keep internal de‑duplication by SKU
  • Examples/Tests: Align transaction row with purchase.id and update tests
  • Fix: Guard HybridObject creation and drop isRuntimeAlive usage to prevent CI/Jest issues.
  • Restore the explicit Failed to initialize connection message when Play Billing rejects initConnection() so logs stay actionable.
  • Keep receipt validation failures tagged with a helpful prefix even when the underlying exception omits a message.
  • Drop the purchase token from acknowledge/consume error payloads to avoid leaking identifiers in client logs.

No breaking changes. Compatible with 14.3.x line.