Skip to main content
Version: 14.3

Basic Store Implementation

IapKit - In-App Purchase Validation Service

This example shows how to implement a basic in-app purchase store using react-native-iap.

Note (3.0.0): Use purchaseToken for purchase validation on both platforms.

Key Features Demonstrated​

1. Connection Management​

  • Automatic connection handling with useIAP
  • Loading states for connection and products

2. Product Loading​

  • Loading both products and subscriptions
  • Error handling for failed product fetches

3. Purchase Flow​

  • Initiating purchases with requestPurchase
  • Handling purchase updates and errors
  • Proper transaction finishing

4. Receipt Validation​

  • Server-side receipt validation with platform-specific handling
  • Error handling for validation failures

5. User Experience​

  • Visual feedback for purchase states
  • Appropriate error messages
  • Loading indicators

Platform Differences​

Purchase Request Parameters​

Important: iOS and Android have completely different parameter structures for requestPurchase:

Unified Structure (v2.7.0+):

await requestPurchase({
request: {
ios: {
sku: productId,
andDangerouslyFinishTransactionAutomatically: false,
},
android: {
skus: [productId],
},
},
});

Platform-specific Implementation (v2.7.0+):

// New API (v2.7.0+) - No Platform.OS checks needed!
await requestPurchase({
request: {
ios: {
sku: productId,
// Set to false for manual transaction finishing
andDangerouslyFinishTransactionAutomatically: false,
},
android: {
skus: [productId],
},
},
});

Key iOS Options​

  • andDangerouslyFinishTransactionAutomatically: false:
    • Recommended: Set to false to manually handle transaction finishing
    • This allows proper receipt validation before completing the transaction
    • Prevents race conditions and ensures proper purchase flow

Purchase Object Properties​

Purchase objects differ slightly per platform. Prefer the unified token and only use platform specifics when required by your backend:

// Unified token
const purchaseToken = purchase.purchaseToken; // iOS: JWS, Android: purchaseToken

// Platform-specific fields that may still be needed
const packageName = (purchase as ProductPurchaseAndroid).packageNameAndroid;

Receipt Validation​

  • Use purchase.purchaseToken and validate on your server for both platforms.
  • Android additionally requires packageName.

Usage​

import React from 'react';
import {NavigationContainer} from '@react-navigation/native';
import Store from './Store';

export default function App() {
return (
<NavigationContainer>
<Store />
</NavigationContainer>
);
}

Customization​

You can customize this example by:

  1. Styling: Modify the styles object to match your app's design
  2. Product IDs: Update PRODUCT_IDS and SUBSCRIPTION_IDS with your actual product IDs
  3. Validation: Implement proper server-side receipt validation
  4. Error Handling: Add more specific error handling for your use case
  5. Features: Add features like purchase restoration, subscription management, etc.

Next Steps​