Release 14.4.0 - Full OpenIAP Ecosystem Adoption
Β· 3 min read
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 genericid
is no longer repurposed for orders; when Google Play omits anorderId
(typical for consumables),transactionId
becomesnull
and clients should rely on the unifiedpurchaseToken
(Android purchase token / iOS JWS). This value is the canonical receipt for server validation. - iOS request types: purchase requests must specify either
in-app
orsubs
. Passingall
(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β
- Recent work: Closed pull requests
- Release builds on the OpenIAP ecosystem: openiap.dev
Enjoy the smoother upgrade path and richer diagnostics shipped in 14.4.0! Let us know how it goes via GitHub issues.