| Crates.io | tauri-plugin-iap |
| lib.rs | tauri-plugin-iap |
| version | 0.4.2 |
| created_at | 2025-08-10 15:02:38.022304+00 |
| updated_at | 2025-09-15 14:22:28.461408+00 |
| description | A Tauri v2 plugin that enables In-App Purchases (IAP) |
| homepage | |
| repository | https://github.com/Choochmeque/tauri-plugin-iap |
| max_upload_size | |
| id | 1789004 |
| size | 280,074 |
A Tauri plugin for In-App Purchases (IAP) with support for subscriptions on iOS (StoreKit 2), Android (Google Play Billing) and Windows (Microsoft Store).
Install the JavaScript package:
npm install @choochmeque/tauri-plugin-iap-api
# or
yarn add @choochmeque/tauri-plugin-iap-api
# or
pnpm add @choochmeque/tauri-plugin-iap-api
Add the plugin to your Tauri project's Cargo.toml:
[dependencies]
tauri-plugin-iap = "0.4"
Configure the plugin permissions in your capabilities/default.json:
{
"permissions": [
"iap:default"
]
}
Register the plugin in your Tauri app:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_iap::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
import {
initialize,
getProducts,
purchase,
restorePurchases,
acknowledgePurchase,
getProductStatus,
onPurchaseUpdated,
PurchaseState
} from 'tauri-plugin-iap-api';
// Initialize the billing client
await initialize();
// Get available products
const products = await getProducts(['subscription_id_1', 'subscription_id_2'], 'subs');
// Check if user owns a specific product
const status = await getProductStatus('subscription_id_1', 'subs');
if (status.isOwned && status.purchaseState === PurchaseState.PURCHASED) {
console.log('User has active subscription');
if (status.isAutoRenewing) {
console.log('Subscription will auto-renew');
}
}
// Purchase a subscription or in-app product
// Simple purchase (will use first available offer on Android if not specified)
const purchaseResult = await purchase('subscription_id_1', 'subs');
// With specific offer token (Android)
const purchaseResult = await purchase('subscription_id_1', 'subs', {
offerToken: product.subscriptionOfferDetails[0].offerToken
});
// With fraud prevention (Android)
const purchaseResult = await purchase('subscription_id_1', 'subs', {
obfuscatedAccountId: 'hashed_account_id',
obfuscatedProfileId: 'hashed_profile_id'
});
// With app account token (iOS - must be valid UUID)
const purchaseResult = await purchase('subscription_id_1', 'subs', {
appAccountToken: '550e8400-e29b-41d4-a716-446655440000'
});
// Restore purchases (specify product type)
const restored = await restorePurchases('subs');
// Acknowledge a purchase (Android only, iOS auto-acknowledges)
await acknowledgePurchase(purchaseResult.purchaseToken);
// Listen for purchase updates
const unlisten = onPurchaseUpdated((purchase) => {
console.log('Purchase updated:', purchase);
});
// Stop listening
unlisten();
initialize()Initializes the billing client connection (required on Android, no-op on iOS).
getProducts(productIds: string[], productType: 'subs' | 'inapp')Fetches product details from the store.
Returns:
products: Array of product objects with:
productId: Product identifiertitle: Display namedescription: Product descriptionproductType: Type of productformattedPrice: Localized price stringsubscriptionOfferDetails: (subscriptions only) Array of offerspurchase(productId: string, productType: 'subs' | 'inapp' = 'subs', options?: PurchaseOptions)Initiates a purchase flow with enhanced options for fraud prevention and account management.
Parameters:
productId: The product to purchaseproductType: Type of product ('subs' for subscriptions, 'inapp' for one-time purchases), defaults to 'subs'options: Optional purchase parameters:
offerToken: (Android) Specific offer to purchase. If not provided, uses first available offerobfuscatedAccountId: (Android) Hashed account ID for fraud preventionobfuscatedProfileId: (Android) Hashed profile ID for fraud preventionappAccountToken: (iOS) UUID string for account tracking and fraud preventionReturns: Purchase object with transaction details
restorePurchases(productType: 'subs' | 'inapp' = 'subs')Queries and returns all active purchases.
Parameters:
productType: Type of products to restore ('subs' or 'inapp'), defaults to 'subs'getPurchaseHistory()Returns the complete purchase history.
acknowledgePurchase(purchaseToken: string)Acknowledges a purchase (required on Android within 3 days, no-op on iOS).
getProductStatus(productId: string, productType: 'subs' | 'inapp' = 'subs')Checks the ownership and subscription status of a specific product.
Parameters:
productId: The product identifier to checkproductType: Type of product ('subs' or 'inapp'), defaults to 'subs'Returns: ProductStatus object with:
productId: Product identifierisOwned: Whether the user currently owns the productpurchaseState: Current state (PURCHASED=0, CANCELED=1, PENDING=2)purchaseTime: When the product was purchased (timestamp)expirationTime: (subscriptions only) When the subscription expiresisAutoRenewing: (subscriptions only) Whether auto-renewal is enabledisAcknowledged: Whether the purchase has been acknowledgedpurchaseToken: Token for the purchase transactiononPurchaseUpdated(callback: (purchase: Purchase) => void)Listens for purchase state changes.