Optional applicationReturn the identifier of the user for your application.
This value is obfuscated according to Store.obfuscator before being
sent to the native platform API. The default obfuscator ('legacy') hashes
or formats the value so the original username is never transmitted in cleartext.
For Apple's App Store, the obfuscated value is used as appAccountToken
(which must be a valid UUID when using StoreKit 2).
You can also pass it per-transaction via additionalData.applicationUsername
in store.order() or store.requestPayment(), which takes priority.
Logger
Avoid invoking store.update() if the most recent call occurred within this specific number of milliseconds.
Optional obfuscatorObfuscation strategy for the application username.
Controls how applicationUsername is transformed before being sent
to each platform's native API. 'uuid' is the recommended setting
for new integrations; the default 'legacy' exists only for
backward compatibility with server-side modules that already
correlate against the raw 32-hex MD5 value.
URL or implementation of the receipt validation service
Define the validator as a string
CdvPurchase.store.validator = "https://validator.iaptic.com/v1/validate?appName=test"
Define the validator as a function
CdvPurchase.store.validator = (receipt, callback) => {
callback({
ok: true,
data: {
// see CdvPurchase.Validator.Response.Payload for details
}
})
}
When adding information to receipt validation requests, those can serve different functions:
Make sure the value your select is in line with your application's privacy policy and your users' tracking preference.
CdvPurchase.store.validator_privacy_policy = [
'fraud', 'support', 'analytics', 'tracking'
]
Verbosity level used by the plugin logger
Set to:
Version of the plugin currently installed.
true if the plugin is initialized and ready
List of all receipts present on the device.
List of all transaction from the local receipts.
List of all purchases from the verified receipts.
List of receipts verified with the receipt validation service.
Those receipt contains more information and are generally more up-to-date than the local ones.
Returns true if a platform supports the requested functionality.
store.checkSupport(Platform.APPLE_APPSTORE, 'requestPayment');
// => false
Find the latest transaction for a given product, from those reported by the device.
Find the last verified purchase for a given product, from those verified by the receipt validator.
Find a product from its id and platform
Product identifier on the platform.
Optional platform: PlatformThe product the product exists in. Can be omitted if you're only using a single payment platform.
Retrieve a platform adapter.
The platform adapter has to have been initialized before.
Get the application username as a string by either calling or returning Store.applicationUsername
Retrieve the billing country code from the platform's storefront.
Returns a Storefront object with the platform and its ISO 3166-1
alpha-2 country code (e.g., "US", "FR"). The country code may be
undefined if the underlying fetch has not yet completed or failed —
the platform is still reported. Returns undefined only when no
matching adapter is ready.
The cache is populated before the storeReady event fires (with a
best-effort timeout), and refreshed after orders and restorePurchases().
Optional platform: PlatformOptional platform. If omitted, returns the first
cached non-empty storefront, or a { platform, countryCode: undefined }
object for the first ready adapter.
const storefront = store.getStorefront();
if (storefront?.countryCode) {
console.log(`Billing country: ${storefront.countryCode}`);
}
Call to initialize the in-app purchase plugin.
List of payment platforms to initialize, default to Store.defaultPlatform().
Opens the billing methods page on AppStore, Play, Microsoft, ...
From this page, the user can update their payment methods.
If platform is not specified, the first available platform will be used.
Optional platform: Platformif (purchase.isBillingRetryPeriod)
store.manageBilling(purchase.platform);
Open the subscription management interface for the selected platform.
If platform is not specified, the first available platform will be used.
Optional platform: Platformconst activeSubscription: Purchase = // ...
store.manageSubscriptions(activeSubscription.platform);
Setup a function to be notified of changes to a transaction state.
The transaction to monitor.
Function to be called when the transaction status changes.
A monitor which can be stopped with monitor.stop()
const monitor = store.monitor(transaction, state => {
console.log('new state: ' + state);
if (state === TransactionState.FINISHED)
monitor.stop();
});
Remove a callback from any listener it might have been added to.
Place an order for a given offer.
Optional additionalData: CdvPurchase.AdditionalDataReturn true if a product is owned
Important: The value will be false when the app starts and will only become true after purchase receipts have been loaded and validated. Without receipt validation, it might remain false depending on the platform, make sure to store the ownership status of non-consumable products in some way.
The product object or identifier of the product.
Register a callback to be called when the plugin is ready.
This happens when all the platforms are initialized and their products loaded.
Register a product.
store.register([{
id: 'subscription1',
type: ProductType.PAID_SUBSCRIPTION,
platform: Platform.APPLE_APPSTORE,
}, {
id: 'subscription1',
type: ProductType.PAID_SUBSCRIPTION,
platform: Platform.GOOGLE_PLAY,
}, {
id: 'consumable1',
type: ProductType.CONSUMABLE,
platform: Platform.BRAINTREE,
}]);
// Can also be used in development to register test products
store.register([{
id: 'my-custom-product',
type: CdvPurchase.ProductType.CONSUMABLE,
platform: CdvPurchase.Platform.TEST,
title: '...',
description: 'A custom test consumable product',
pricing: {
price: '$2.99',
currency: 'USD',
priceMicros: 2990000
}
}]);
Request a payment.
A payment is a custom amount to charge the user. Make sure the selected payment platform supports Payment Requests.
Parameters of the payment request
Optional additionalData: CdvPurchase.AdditionalDataAdditional parameters
Register event callbacks.
Events overview:
productUpdated: Called when product metadata is loaded from the storereceiptUpdated: Called when local receipt information changes (ownership status change, for example)verified: Called after successful receipt validation (requires a receipt validator)// Monitor ownership with receipt validation
store.when()
.approved(transaction => transaction.verify())
.verified(receipt => {
if (store.owned("my-product")) {
// Product is owned and verified
}
});
// Monitor ownership without receipt validation
store.when().receiptUpdated(receipt => {
if (store.owned("my-product")) {
// Product is owned according to local data
}
});
Entry class of the plugin.