Skip to main content

Release 14.4.0 - Full OpenIAP Ecosystem Adoption

Β· 3 min read
Hyo
React Native IAP Maintainer

React Native IAP Logo

React Native IAP 14.4.0 graduates the project into the full OpenIAP ecosystem. The release ships with three dedicated native stacks:

  • openiap-apple β€” StoreKit 2 implementation for Apple platforms
  • openiap-google β€” Google Play Billing integration for Android
  • openiap-gql β€” GraphQL helpers that drive types and tooling

From 14.4.0 onward, React Native IAP stays in lockstep with these modules: Apple v1.2.2, Google v1.2.6, and GQL v1.0.8. That shared version alignment gives React Native IAP stable native compatibility and a unified type system straight from the OpenIAP schema.

πŸš€ Highlights​

  • Adopted the full OpenIAP core stackβ€”openiap-gql, openiap-apple v1.2.2, and openiap-google v1.2.6β€”bringing React Native IAP into alignment with the shared ecosystem used across Flutter, React Native, and KMP.
  • Trimmed roughly two thirds of our custom native bridge code by delegating logic to the OpenIAP modules.
  • Expanded automated coverage to about 98%, spanning purchase flows, native bridge entry points, and error mapping utilities.

πŸ” OpenIAP Upgrades​

  • Normalized purchase payloads on both platforms so every bridge call sanitizes platform casing and forwards the complete OpenIAP record.
  • Migrated Android to the new RequestPurchaseProps / PurchaseResult / ErrorCode contracts, achieving parity with the Apple module.
  • Centralized native dependency versions via openiap-versions.json; Gradle now fails fast if the Google artifact version is missing and scripts/migrations read from one source of truth.

🐞 Bug Fixes​

  • fix(android): honor subscription offerToken (#214) restores proper handling of subscriptionOfferDetailsAndroid so Google Play discounts apply reliably.

πŸ›‘οΈ Safer Purchases & Better Errors​

  • requestPurchase on iOS explicitly rejects unsupported product types instead of silently treating all as in-app.
  • Error handling now consistently routes through the shared ErrorCode table so promise rejections, platform conversions, and predicates remain aligned.

πŸ› οΈ Tooling & Workflow​

  • Contributor docs clarify how to bump OpenIAP packages, regenerate types, and keep openiap-versions.json synchronized for Android and iOS builds.

⚠️ Important Changes​

  • Transaction identifiers: transactionId is reinstated as the primary store reference (orderId on Android, StoreKit transaction ID on iOS). Android's generic id is no longer repurposed for orders; when Google Play omits an orderId (typical for consumables), transactionId becomes null and clients should rely on the unified purchaseToken (Android purchase token / iOS JWS). This value is the canonical receipt for server validation.
  • iOS request types: purchase requests must specify either in-app or subs. Passing all (or any other type) throws an explicit error.
  • Promoted products: events now emit the full sanitized product payload; downstream listeners should expect the entire object instead of just productId.

πŸ“¦ Installation​

npm install react-native-iap@14.4.0
# or
yarn add react-native-iap@14.4.0
# or
bun add react-native-iap@14.4.0

πŸ”— References​

Enjoy the smoother upgrade path and richer diagnostics shipped in 14.4.0! Let us know how it goes via GitHub issues.