• Stars
    star
    139
  • Rank 262,954 (Top 6 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Capacitor in-app purchases and subscriptions made easy.

😻 In-App Subscriptions Made Easy 😻

License Release

RevenueCat is a powerful, reliable, and free to use in-app purchase server with cross-platform support. Our open-source framework provides a backend and a wrapper around StoreKit and Google Play Billing to make implementing in-app purchases and subscriptions easy.

Whether you are building a new app or already have millions of customers, you can use RevenueCat to:

  • Fetch products, make purchases, and check subscription status with our native SDKs.
  • Host and configure products remotely from our dashboard.
  • Analyze the most important metrics for your app business in one place.
  • See customer transaction histories, chart lifetime value, and grant promotional subscriptions.
  • Get notified of real-time events through webhooks.
  • Send enriched purchase events to analytics and attribution tools with our easy integrations.

Sign up to get started for free.

@revenucat/purchases-capacitor

@revenuecat/purchases-capacitor is the client for the RevenueCat subscription and purchase tracking system. It is an open source framework that provides a wrapper around StoreKit, Google Play Billing and the RevenueCat backend to make implementing in-app purchases in Capacitor easy.

RevenueCat SDK Features

RevenueCat
Server-side receipt validation
➡️ Webhooks - enhanced server-to-server communication with events for purchases, renewals, cancellations, and more
🎯 Subscription status tracking - know whether a user is subscribed whether they're on iOS, Android or web
📊 Analytics - automatic calculation of metrics like conversion, mrr, and churn
📝 Online documentation up to date
🔀 Integrations - over a dozen integrations to easily send purchase data where you need it
💯 Well maintained - frequent releases
📮 Great support - Help Center

Getting Started

For more detailed information, you can view our complete documentation at docs.revenuecat.com.

Please follow the Quickstart Guide for more information on how to install the SDK.

npm install @revenuecat/purchases-capacitor
npx cap sync

Contributing

Contributions are always welcome! To learn how you can contribute, please see the Contributing Guide.

Acknowledgment

This plugin is based on CapGo's Capacitor plugin. The plugin was transferred to RevenueCat to become an officially supported plugin.

API

configure(...)

configure(configuration: PurchasesConfiguration) => Promise<void>

Sets up Purchases with your API key and an app user id.

Param Type Description
configuration PurchasesConfiguration RevenueCat configuration object including the API key and other optional parameters. See {@link PurchasesConfiguration}

setMockWebResults(...)

setMockWebResults(options: { shouldMockWebResults: boolean; }) => Promise<void>

Sets whether the SDK should return mocked results in the web version. This won't affect the iOS and Android versions of the implementation. Default is false

Param Type Description
options { shouldMockWebResults: boolean; } Set shouldMockWebResults to true if you want the plugin methods to return mocked values

setFinishTransactions(...)

setFinishTransactions(options: { finishTransactions: boolean; }) => Promise<void>
Param Type Description
options { finishTransactions: boolean; } Set finishTransactions to false if you aren't using Purchases SDK to make the purchase

setSimulatesAskToBuyInSandbox(...)

setSimulatesAskToBuyInSandbox(options: { simulatesAskToBuyInSandbox: boolean; }) => Promise<void>

iOS only.

Param Type Description
options { simulatesAskToBuyInSandbox: boolean; } Set this property to true only when testing the ask-to-buy / SCA purchases flow. More information: http://errors.rev.cat/ask-to-buy

addCustomerInfoUpdateListener(...)

addCustomerInfoUpdateListener(customerInfoUpdateListener: CustomerInfoUpdateListener) => Promise<PurchasesCallbackId>

Sets a function to be called on updated customer info

Param Type Description
customerInfoUpdateListener CustomerInfoUpdateListener CustomerInfo update listener

Returns: Promise<string>


removeCustomerInfoUpdateListener(...)

removeCustomerInfoUpdateListener(listenerToRemove: PurchasesCallbackId) => Promise<{ wasRemoved: boolean; }>

Removes a given CustomerInfoUpdateListener

Param Type Description
listenerToRemove string CustomerInfoUpdateListener reference of the listener to remove

Returns: Promise<{ wasRemoved: boolean; }>


getOfferings()

getOfferings() => Promise<PurchasesOfferings>

Gets the map of entitlements -> offerings -> products

Returns: Promise<PurchasesOfferings>


getProducts(...)

getProducts(options: GetProductOptions) => Promise<{ products: PurchasesStoreProduct[]; }>

Fetch the product info

Param Type
options GetProductOptions

Returns: Promise<{ products: PurchasesStoreProduct[]; }>


purchaseStoreProduct(...)

purchaseStoreProduct(options: PurchaseStoreProductOptions) => Promise<MakePurchaseResult>

Make a purchase

Param Type
options PurchaseStoreProductOptions

Returns: Promise<MakePurchaseResult>


purchaseDiscountedProduct(...)

purchaseDiscountedProduct(options: PurchaseDiscountedProductOptions) => Promise<MakePurchaseResult>

iOS only. Purchase a product applying a given discount.

Param Type
options PurchaseDiscountedProductOptions

Returns: Promise<MakePurchaseResult>


purchasePackage(...)

purchasePackage(options: PurchasePackageOptions) => Promise<MakePurchaseResult>

Make a purchase

Param Type
options PurchasePackageOptions

Returns: Promise<MakePurchaseResult>


purchaseSubscriptionOption(...)

purchaseSubscriptionOption(options: PurchaseSubscriptionOptionOptions) => Promise<MakePurchaseResult>

Google only. Make a purchase of a subscriptionOption

Param Type
options PurchaseSubscriptionOptionOptions

Returns: Promise<MakePurchaseResult>


purchaseDiscountedPackage(...)

purchaseDiscountedPackage(options: PurchaseDiscountedPackageOptions) => Promise<MakePurchaseResult>

iOS only. Purchase a package applying a given discount.

Param Type
options PurchaseDiscountedPackageOptions

Returns: Promise<MakePurchaseResult>


restorePurchases()

restorePurchases() => Promise<{ customerInfo: CustomerInfo; }>

Restores a user's previous purchases and links their appUserIDs to any user's also using those purchases.

Returns: Promise<{ customerInfo: CustomerInfo; }>


getAppUserID()

getAppUserID() => Promise<{ appUserID: string; }>

Get the appUserID

Returns: Promise<{ appUserID: string; }>


logIn(...)

logIn(options: { appUserID: string; }) => Promise<LogInResult>

This function will log in the current user with an appUserID. Typically, this would be used after a log in to identify a user without calling configure.

Param Type Description
options { appUserID: string; } The appUserID that should be linked to the current user

Returns: Promise<LogInResult>


logOut()

logOut() => Promise<{ customerInfo: CustomerInfo; }>

Logs out the Purchases client clearing the saved appUserID. This will generate a random user id and save it in the cache.

Returns: Promise<{ customerInfo: CustomerInfo; }>


setLogLevel(...)

setLogLevel(options: { level: LOG_LEVEL; }) => Promise<void>

Used to set the log level. Useful for debugging issues with the lovely team @RevenueCat. The default is {LOG_LEVEL.INFO} in release builds and {LOG_LEVEL.DEBUG} in debug builds.

Param Type Description
options { level: LOG_LEVEL; } Log level to use to display logs.

setLogHandler(...)

setLogHandler(logHandler: LogHandler) => Promise<void>

Set a custom log handler for redirecting logs to your own logging system. By default, this sends info, warning, and error messages. If you wish to receive Debug level messages, see [setLogLevel].

Param Type Description
logHandler LogHandler It will get called for each log event. Use this function to redirect the log to your own logging system

getCustomerInfo()

getCustomerInfo() => Promise<{ customerInfo: CustomerInfo; }>

Gets current customer info

Returns: Promise<{ customerInfo: CustomerInfo; }>


syncPurchases()

syncPurchases() => Promise<void>

This method will send all the purchases to the RevenueCat backend. Call this when using your own implementation for subscriptions anytime a sync is needed, like after a successful purchase.


syncObserverModeAmazonPurchase(...)

syncObserverModeAmazonPurchase(options: SyncObserverModeAmazonPurchaseOptions) => Promise<void>

This method will send a purchase to the RevenueCat backend. This function should only be called if you are in Amazon observer mode or performing a client side migration of your current users to RevenueCat.

The receipt IDs are cached if successfully posted, so they are not posted more than once.

Param Type
options SyncObserverModeAmazonPurchaseOptions

enableAdServicesAttributionTokenCollection()

enableAdServicesAttributionTokenCollection() => Promise<void>

Enable automatic collection of Apple Search Ad attribution on iOS. Disabled by default. Supported in iOS 14.3+ only


isAnonymous()

isAnonymous() => Promise<{ isAnonymous: boolean; }>

Returns: Promise<{ isAnonymous: boolean; }>


checkTrialOrIntroductoryPriceEligibility(...)

checkTrialOrIntroductoryPriceEligibility(options: { productIdentifiers: string[]; }) => Promise<{ [productId: string]: IntroEligibility; }>

iOS only. Computes whether a user is eligible for the introductory pricing period of a given product. You should use this method to determine whether you show the user the normal product price or the introductory price. This also applies to trials (trials are considered a type of introductory pricing).

Param Type Description
options { productIdentifiers: string[]; } Array of product identifiers for which you want to compute eligibility

Returns: Promise<{ [productId: string]: IntroEligibility; }>


getPromotionalOffer(...)

getPromotionalOffer(options: GetPromotionalOfferOptions) => Promise<PurchasesPromotionalOffer | undefined>

iOS only. Use this function to retrieve the PurchasesPromotionalOffer for a given PurchasesPackage.

Param Type
options GetPromotionalOfferOptions

Returns: Promise<PurchasesPromotionalOffer>


invalidateCustomerInfoCache()

invalidateCustomerInfoCache() => Promise<void>

Invalidates the cache for customer information.

Most apps will not need to use this method; invalidating the cache can leave your app in an invalid state. Refer to https://docs.revenuecat.com/docs/customer-info#section-get-user-information for more information on using the cache properly.

This is useful for cases where customer information might have been updated outside the app, like if a promotional subscription is granted through the RevenueCat dashboard.


presentCodeRedemptionSheet()

presentCodeRedemptionSheet() => Promise<void>

iOS 14.0+ only. Presents a code redemption sheet, useful for redeeming offer codes Refer to https://docs.revenuecat.com/docs/ios-subscription-offers#offer-codes for more information on how to configure and use offer codes


setAttributes(...)

setAttributes(attributes: { [key: string]: string | null; }) => Promise<void>

Subscriber attributes are useful for storing additional, structured information on a user. Since attributes are writable using a public key they should not be used for managing secure or sensitive information such as subscription status, coins, etc.

Key names starting with "$" are reserved names used by RevenueCat. For a full list of key restrictions refer to our guide: https://docs.revenuecat.com/docs/subscriber-attributes

Param Type Description
attributes { [key: string]: string | null; } Map of attributes by key. Set the value as an empty string to delete an attribute.

setEmail(...)

setEmail(options: { email: string | null; }) => Promise<void>

Subscriber attribute associated with the email address for the user

Param Type Description
options { email: string | null; } Empty String or null will delete the subscriber attribute.

setPhoneNumber(...)

setPhoneNumber(options: { phoneNumber: string | null; }) => Promise<void>

Subscriber attribute associated with the phone number for the user

Param Type Description
options { phoneNumber: string | null; } Empty String or null will delete the subscriber attribute.

setDisplayName(...)

setDisplayName(options: { displayName: string | null; }) => Promise<void>

Subscriber attribute associated with the display name for the user

Param Type Description
options { displayName: string | null; } Empty String or null will delete the subscriber attribute.

setPushToken(...)

setPushToken(options: { pushToken: string | null; }) => Promise<void>

Subscriber attribute associated with the push token for the user

Param Type Description
options { pushToken: string | null; } null will delete the subscriber attribute.

setProxyURL(...)

setProxyURL(options: { url: string; }) => Promise<void>

Set this property to your proxy URL before configuring Purchases only if you've received a proxy key value from your RevenueCat contact.

Param Type
options { url: string; }

collectDeviceIdentifiers()

collectDeviceIdentifiers() => Promise<void>

Automatically collect subscriber attributes associated with the device identifiers. $idfa, $idfv, $ip on iOS $gpsAdId, $androidId, $ip on Android


setAdjustID(...)

setAdjustID(options: { adjustID: string | null; }) => Promise<void>

Subscriber attribute associated with the Adjust ID for the user Required for the RevenueCat Adjust integration

Param Type Description
options { adjustID: string | null; } Adjust ID to use in Adjust integration. Empty String or null will delete the subscriber attribute.

setAppsflyerID(...)

setAppsflyerID(options: { appsflyerID: string | null; }) => Promise<void>

Subscriber attribute associated with the AppsFlyer ID for the user Required for the RevenueCat AppsFlyer integration

Param Type Description
options { appsflyerID: string | null; } Appsflyer ID to use in Appsflyer integration. Empty String or null will delete the subscriber attribute.

setFBAnonymousID(...)

setFBAnonymousID(options: { fbAnonymousID: string | null; }) => Promise<void>

Subscriber attribute associated with the Facebook SDK Anonymous ID for the user Recommended for the RevenueCat Facebook integration

Param Type Description
options { fbAnonymousID: string | null; } Facebook Anonymous ID to use in Mparticle integration. Empty String or null will delete the subscriber attribute.

setMparticleID(...)

setMparticleID(options: { mparticleID: string | null; }) => Promise<void>

Subscriber attribute associated with the mParticle ID for the user Recommended for the RevenueCat mParticle integration

Param Type Description
options { mparticleID: string | null; } Mparticle ID to use in Mparticle integration. Empty String or null will delete the subscriber attribute.

setCleverTapID(...)

setCleverTapID(options: { cleverTapID: string | null; }) => Promise<void>

Subscriber attribute associated with the CleverTap ID for the user Required for the RevenueCat CleverTap integration

Param Type Description
options { cleverTapID: string | null; } CleverTap user ID to use in CleverTap integration. Empty String or null will delete the subscriber attribute.

setMixpanelDistinctID(...)

setMixpanelDistinctID(options: { mixpanelDistinctID: string | null; }) => Promise<void>

Subscriber attribute associated with the Mixpanel Distinct ID for the user Required for the RevenueCat Mixpanel integration

Param Type Description
options { mixpanelDistinctID: string | null; } Mixpanel Distinct ID to use in Mixpanel integration. Empty String or null will delete the subscriber attribute.

setFirebaseAppInstanceID(...)

setFirebaseAppInstanceID(options: { firebaseAppInstanceID: string | null; }) => Promise<void>

Subscriber attribute associated with the Firebase App Instance ID for the user Required for the RevenueCat Firebase integration

Param Type Description
options { firebaseAppInstanceID: string | null; } Firebase App Instance ID to use in Firebase integration. Empty String or null will delete the subscriber attribute.

setOnesignalID(...)

setOnesignalID(options: { onesignalID: string | null; }) => Promise<void>

Subscriber attribute associated with the OneSignal Player ID for the user Required for the RevenueCat OneSignal integration

Param Type Description
options { onesignalID: string | null; } OneSignal Player ID to use in OneSignal integration. Empty String or null will delete the subscriber attribute.

setAirshipChannelID(...)

setAirshipChannelID(options: { airshipChannelID: string | null; }) => Promise<void>

Subscriber attribute associated with the Airship Channel ID for the user Required for the RevenueCat Airship integration

Param Type Description
options { airshipChannelID: string | null; } Airship Channel ID to use in Airship integration. Empty String or null will delete the subscriber attribute.

setMediaSource(...)

setMediaSource(options: { mediaSource: string | null; }) => Promise<void>

Subscriber attribute associated with the install media source for the user

Param Type Description
options { mediaSource: string | null; } Empty String or null will delete the subscriber attribute.

setCampaign(...)

setCampaign(options: { campaign: string | null; }) => Promise<void>

Subscriber attribute associated with the install campaign for the user

Param Type Description
options { campaign: string | null; } Empty String or null will delete the subscriber attribute.

setAdGroup(...)

setAdGroup(options: { adGroup: string | null; }) => Promise<void>

Subscriber attribute associated with the install ad group for the user

Param Type Description
options { adGroup: string | null; } Empty String or null will delete the subscriber attribute.

setAd(...)

setAd(options: { ad: string | null; }) => Promise<void>

Subscriber attribute associated with the install ad for the user

Param Type Description
options { ad: string | null; } Empty String or null will delete the subscriber attribute.

setKeyword(...)

setKeyword(options: { keyword: string | null; }) => Promise<void>

Subscriber attribute associated with the install keyword for the user

Param Type Description
options { keyword: string | null; } Empty String or null will delete the subscriber attribute.

setCreative(...)

setCreative(options: { creative: string | null; }) => Promise<void>

Subscriber attribute associated with the install ad creative for the user

Param Type Description
options { creative: string | null; } Empty String or null will delete the subscriber attribute.

canMakePayments(...)

canMakePayments(options?: { features?: BILLING_FEATURE[] | undefined; } | undefined) => Promise<{ canMakePayments: boolean; }>

Check if billing is supported for the current user (meaning IN-APP purchases are supported) and optionally, whether a list of specified feature types are supported.

Note: Billing features are only relevant to Google Play Android users. For other stores and platforms, billing features won't be checked.

Param Type Description
options { features?: BILLING_FEATURE[]; } An array of feature types to check for support. Feature types must be one of [BILLING_FEATURE]. By default, is an empty list and no specific feature support will be checked.

Returns: Promise<{ canMakePayments: boolean; }>


beginRefundRequestForActiveEntitlement()

beginRefundRequestForActiveEntitlement() => Promise<{ refundRequestStatus: REFUND_REQUEST_STATUS; }>

iOS 15+ only. Presents a refund request sheet in the current window scene for the latest transaction associated with the active entitlement.

If the request was unsuccessful, no active entitlements could be found for the user, or multiple active entitlements were found for the user, the promise will return an error. If called in an unsupported platform (Android or iOS < 15), an UnsupportedPlatformException will be thrown.

Important: This method should only be used if your user can only have a single active entitlement at a given time. If a user could have more than one entitlement at a time, use beginRefundRequestForEntitlement instead.

Returns: Promise<{ refundRequestStatus: REFUND_REQUEST_STATUS; }>


beginRefundRequestForEntitlement(...)

beginRefundRequestForEntitlement(options: { entitlementInfo: PurchasesEntitlementInfo; }) => Promise<{ refundRequestStatus: REFUND_REQUEST_STATUS; }>

iOS 15+ only. Presents a refund request sheet in the current window scene for the latest transaction associated with the entitlement.

If the request was unsuccessful, the promise will return an error. If called in an unsupported platform (Android or iOS < 15), an UnsupportedPlatformException will be thrown.

Param Type Description
options { entitlementInfo: PurchasesEntitlementInfo; } The entitlement to begin a refund request for.

Returns: Promise<{ refundRequestStatus: REFUND_REQUEST_STATUS; }>


beginRefundRequestForProduct(...)

beginRefundRequestForProduct(options: { storeProduct: PurchasesStoreProduct; }) => Promise<{ refundRequestStatus: REFUND_REQUEST_STATUS; }>

iOS 15+ only. Presents a refund request sheet in the current window scene for the latest transaction associated with the product.

If the request was unsuccessful, the promise will return an error. If called in an unsupported platform (Android or iOS < 15), an UnsupportedPlatformException will be thrown.

Param Type Description
options { storeProduct: PurchasesStoreProduct; } The StoreProduct to begin a refund request for.

Returns: Promise<{ refundRequestStatus: REFUND_REQUEST_STATUS; }>


showInAppMessages(...)

showInAppMessages(options?: { messageTypes?: IN_APP_MESSAGE_TYPE[] | undefined; } | undefined) => Promise<void>

Shows in-app messages available from the App Store or Google Play. You need to disable messages from showing automatically using [PurchasesConfiguration.shouldShowInAppMessagesAutomatically].

Note: In iOS, this requires version 16+. In older versions the promise will be resolved successfully immediately.

Param Type Description
options { messageTypes?: IN_APP_MESSAGE_TYPE[]; } An array of message types that the stores can display inside your app. Values must be one of [IN_APP_MESSAGE_TYPE]. By default, is undefined and all message types will be shown.

isConfigured()

isConfigured() => Promise<{ isConfigured: boolean; }>

Check if configure has finished and Purchases has been configured.

Returns: Promise<{ isConfigured: boolean; }>


Interfaces

PurchasesConfiguration

Holds parameters to initialize the SDK.

Prop Type Description
apiKey string RevenueCat API Key. Needs to be a string
appUserID string | null A unique id for identifying the user
observerMode boolean An optional boolean. Set this to TRUE if you have your own IAP implementation and want to use only RevenueCat's backend. Default is FALSE. If you are on Android and setting this to ON, you will have to acknowledge the purchases yourself.
userDefaultsSuiteName string An optional string. iOS-only, will be ignored for Android. Set this if you would like the RevenueCat SDK to store its preferences in a different NSUserDefaults suite, otherwise it will use standardUserDefaults. Default is null, which will make the SDK use standardUserDefaults.
usesStoreKit2IfAvailable boolean iOS-only, will be ignored for Android. Set this to TRUE to enable StoreKit2. Default is FALSE.
useAmazon boolean An optional boolean. Android only. Required to configure the plugin to be used in the Amazon Appstore.
shouldShowInAppMessagesAutomatically boolean Whether we should show store in-app messages automatically. Both Google Play and the App Store provide in-app messages for some situations like billing issues. By default, those messages will be shown automatically. This allows to disable that behavior, so you can display those messages at your convenience. For more information, check: https://rev.cat/storekit-message and https://rev.cat/googleplayinappmessaging
entitlementVerificationMode ENTITLEMENT_VERIFICATION_MODE Verification strictness levels for [EntitlementInfo]. See https://rev.cat/trusted-entitlements for more info.

CustomerInfo

Prop Type Description
entitlements PurchasesEntitlementInfos Entitlements attached to this customer info
activeSubscriptions string[] Set of active subscription skus
allPurchasedProductIdentifiers string[] Set of purchased skus, active and inactive
latestExpirationDate string | null The latest expiration date of all purchased skus
firstSeen string The date this user was first seen in RevenueCat.
originalAppUserId string The original App User Id recorded for this user.
requestDate string Date when this info was requested
allExpirationDates { [key: string]: string | null; } Map of skus to expiration dates
allPurchaseDates { [key: string]: string | null; } Map of skus to purchase dates
originalApplicationVersion string | null Returns the version number for the version of the application when the user bought the app. Use this for grandfathering users when migrating to subscriptions. This corresponds to the value of CFBundleVersion (in iOS) in the Info.plist file when the purchase was originally made. This is always null in Android
originalPurchaseDate string | null Returns the purchase date for the version of the application when the user bought the app. Use this for grandfathering users when migrating to subscriptions.
managementURL string | null URL to manage the active subscription of the user. If this user has an active iOS subscription, this will point to the App Store, if the user has an active Play Store subscription it will point there. If there are no active subscriptions it will be null. If there are multiple for different platforms, it will point to the device store.
nonSubscriptionTransactions PurchasesStoreTransaction[]

PurchasesEntitlementInfos

Contains all the entitlements associated to the user.

Prop Type Description
all { [key: string]: PurchasesEntitlementInfo; } Map of all EntitlementInfo (PurchasesEntitlementInfo) objects (active and inactive) keyed by entitlement identifier.
active { [key: string]: PurchasesEntitlementInfo; } Map of active EntitlementInfo (PurchasesEntitlementInfo) objects keyed by entitlement identifier.
verification VERIFICATION_RESULT If entitlement verification was enabled, the result of that verification. If not, VerificationResult.NOT_REQUESTED

PurchasesEntitlementInfo

The EntitlementInfo object gives you access to all of the information about the status of a user entitlement.

Prop Type Description
identifier string The entitlement identifier configured in the RevenueCat dashboard
isActive boolean True if the user has access to this entitlement
willRenew boolean True if the underlying subscription is set to renew at the end of the billing period (expirationDate).
periodType string The last period type this entitlement was in. Either: NORMAL, INTRO, TRIAL.
latestPurchaseDate string The latest purchase or renewal date for the entitlement in ISO8601 format.
latestPurchaseDateMillis number The latest purchase or renewal date for the entitlement in milliseconds.
originalPurchaseDate string The first date this entitlement was purchased in ISO8601 format.
originalPurchaseDateMillis number The first date this entitlement was purchased in milliseconds.
expirationDate string | null The expiration date for the entitlement in ISO8601, can be null for lifetime access. If the periodType is trial, this is the trial expiration date.
expirationDateMillis number | null The expiration date for the entitlement in milliseconds, can be null for lifetime access. If the periodType is trial, this is the trial expiration date.
store 'PLAY_STORE' | 'APP_STORE' | 'STRIPE' | 'MAC_APP_STORE' | 'PROMOTIONAL' | 'AMAZON' | 'UNKNOWN_STORE' The store where this entitlement was unlocked from.
productIdentifier string The product identifier that unlocked this entitlement
productPlanIdentifier string | null The product plan identifier that unlocked this entitlement. Android subscriptions only, null on consumables and iOS.
isSandbox boolean False if this entitlement is unlocked via a production purchase
unsubscribeDetectedAt string | null The date an unsubscribe was detected in ISO8601 format. Can be null.
unsubscribeDetectedAtMillis number | null The date an unsubscribe was detected in milliseconds. Can be null.
billingIssueDetectedAt string | null The date a billing issue was detected in ISO8601 format. Can be null if there is no billing issue or an issue has been resolved
billingIssueDetectedAtMillis number | null The date a billing issue was detected in milliseconds. Can be null if there is no billing issue or an issue has been resolved
ownershipType 'FAMILY_SHARED' | 'PURCHASED' | 'UNKNOWN' Supported ownership types for an entitlement. PURCHASED if the purchase was made directly by this user. FAMILY_SHARED if the purchase has been shared to this user by a family member. UNKNOWN if the purchase has no or an unknown ownership type.
verification VERIFICATION_RESULT If entitlement verification was enabled, the result of that verification. If not, VerificationResult.NOT_REQUESTED

PurchasesStoreTransaction

List of all non subscription transactions. Use this to fetch the history of non-subscription purchases

Prop Type Description
transactionIdentifier string Id of the transaction.
productIdentifier string Product Id associated with the transaction.
purchaseDate string Purchase date of the transaction in ISO 8601 format.

PurchasesOfferings

Contains all the offerings configured in RevenueCat dashboard. For more info see https://docs.revenuecat.com/docs/entitlements

Prop Type Description
all { [key: string]: PurchasesOffering; } Map of all Offerings [PurchasesOffering] objects keyed by their identifier.
current PurchasesOffering | null Current offering configured in the RevenueCat dashboard.

PurchasesOffering

An offering is a collection of Packages (PurchasesPackage) available for the user to purchase. For more info see https://docs.revenuecat.com/docs/entitlements

Prop Type Description
identifier string Unique identifier defined in RevenueCat dashboard.
serverDescription string Offering description defined in RevenueCat dashboard.
metadata { [key: string]: unknown; } Offering metadata defined in RevenueCat dashboard. To access values, you need to check the type beforehand. For example: const my_unknown_value: unknown = offering.metadata['my_key']; const my_string_value: string | undefined = typeof(my_unknown_value) === 'string' ? my_unknown_value : undefined;
availablePackages PurchasesPackage[] Array of Package objects available for purchase.
lifetime PurchasesPackage | null Lifetime package type configured in the RevenueCat dashboard, if available.
annual PurchasesPackage | null Annual package type configured in the RevenueCat dashboard, if available.
sixMonth PurchasesPackage | null Six month package type configured in the RevenueCat dashboard, if available.
threeMonth PurchasesPackage | null Three month package type configured in the RevenueCat dashboard, if available.
twoMonth PurchasesPackage | null Two month package type configured in the RevenueCat dashboard, if available.
monthly PurchasesPackage | null Monthly package type configured in the RevenueCat dashboard, if available.
weekly PurchasesPackage | null Weekly package type configured in the RevenueCat dashboard, if available.

PurchasesPackage

Contains information about the product available for the user to purchase. For more info see https://docs.revenuecat.com/docs/entitlements

Prop Type Description
identifier string Unique identifier for this package. Can be one a predefined package type or a custom one.
packageType PACKAGE_TYPE Package type for the product. Will be one of [PACKAGE_TYPE].
product PurchasesStoreProduct Product assigned to this package.
offeringIdentifier string Offering this package belongs to.

PurchasesStoreProduct

Prop Type Description
identifier string Product Id.
description string Description of the product.
title string Title of the product.
price number Price of the product in the local currency. Contains the price value of defaultOption for Google Play.
priceString string Formatted price of the item, including its currency sign. Contains the formatted price value of defaultOption for Google Play.
currencyCode string Currency code for price and original price. Contains the currency code value of defaultOption for Google Play.
introPrice PurchasesIntroPrice | null Introductory price.
discounts PurchasesStoreProductDiscount[] | null Collection of discount offers for a product. Null for Android.
productCategory PRODUCT_CATEGORY | null Product category.
productType PRODUCT_TYPE The specific type of subscription or one time purchase this product represents. Important: In iOS, if using StoreKit 1, we cannot determine the type.
subscriptionPeriod string | null Subscription period, specified in ISO 8601 format. For example, P1W equates to one week, P1M equates to one month, P3M equates to three months, P6M equates to six months, and P1Y equates to one year. Note: Not available for Amazon.
defaultOption SubscriptionOption | null Default subscription option for a product. Google Play only.
subscriptionOptions SubscriptionOption[] | null Collection of subscription options for a product. Google Play only.
presentedOfferingIdentifier string | null Offering identifier the store product was presented from. Null if not using offerings or if fetched directly from store via getProducts.

PurchasesIntroPrice

Prop Type Description
price number Price in the local currency.
priceString string Formatted price, including its currency sign, such as €3.99.
cycles number Number of subscription billing periods for which the user will be given the discount, such as 3.
period string Billing period of the discount, specified in ISO 8601 format.
periodUnit string Unit for the billing period of the discount, can be DAY, WEEK, MONTH or YEAR.
periodNumberOfUnits number Number of units for the billing period of the discount.

PurchasesStoreProductDiscount

Prop Type Description
identifier string Identifier of the discount.
price number Price in the local currency.
priceString string Formatted price, including its currency sign, such as €3.99.
cycles number Number of subscription billing periods for which the user will be given the discount, such as 3.
period string Billing period of the discount, specified in ISO 8601 format.
periodUnit string Unit for the billing period of the discount, can be DAY, WEEK, MONTH or YEAR.
periodNumberOfUnits number Number of units for the billing period of the discount.

SubscriptionOption

Contains all details associated with a SubscriptionOption Used only for Google

Prop Type Description
id string Identifier of the subscription option If this SubscriptionOption represents a base plan, this will be the basePlanId. If it represents an offer, it will be {basePlanId}:{offerId}
storeProductId string Identifier of the StoreProduct associated with this SubscriptionOption This will be {subId}:{basePlanId}
productId string Identifer of the subscription associated with this SubscriptionOption This will be {subId}
pricingPhases PricingPhase[] Pricing phases defining a user's payment plan for the product over time.
tags string[] Tags defined on the base plan or offer. Empty for Amazon.
isBasePlan boolean True if this SubscriptionOption represents a subscription base plan (rather than an offer).
billingPeriod Period | null The subscription period of fullPricePhase (after free and intro trials).
isPrepaid boolean True if the subscription is pre-paid.
fullPricePhase PricingPhase | null The full price PricingPhase of the subscription. Looks for the last price phase of the SubscriptionOption.
freePhase PricingPhase | null The free trial PricingPhase of the subscription. Looks for the first pricing phase of the SubscriptionOption where amountMicros is 0. There can be a freeTrialPhase and an introductoryPhase in the same SubscriptionOption.
introPhase PricingPhase | null The intro trial PricingPhase of the subscription. Looks for the first pricing phase of the SubscriptionOption where amountMicros is greater than 0. There can be a freeTrialPhase and an introductoryPhase in the same SubscriptionOption.
presentedOfferingIdentifier string | null Offering identifier the subscription option was presented from

PricingPhase

Contains all the details associated with a PricingPhase

Prop Type Description
billingPeriod Period Billing period for which the PricingPhase applies
recurrenceMode RECURRENCE_MODE | null Recurrence mode of the PricingPhase
billingCycleCount number | null Number of cycles for which the pricing phase applies. Null for infiniteRecurring or finiteRecurring recurrence modes.
price Price Price of the PricingPhase
offerPaymentMode OFFER_PAYMENT_MODE | null Indicates how the pricing phase is charged for finiteRecurring pricing phases

Period

Contains all the details associated with a Period

Prop Type Description
unit PERIOD_UNIT The number of period units: day, week, month, year, unknown
value number The increment of time that a subscription period is specified in
iso8601 string Specified in ISO 8601 format. For example, P1W equates to one week, P1M equates to one month, P3M equates to three months, P6M equates to six months, and P1Y equates to one year

Price

Contains all the details associated with a Price

Prop Type Description
formatted string Formatted price of the item, including its currency sign. For example $3.00
amountMicros number Price in micro-units, where 1,000,000 micro-units equal one unit of the currency. For example, if price is "€7.99", price_amount_micros is 7,990,000. This value represents the localized, rounded price for a particular currency.
currencyCode string Returns ISO 4217 currency code for price and original price. For example, if price is specified in British pounds sterling, price_currency_code is "GBP". If currency code cannot be determined, currency symbol is returned.

GetProductOptions

Prop Type Description
productIdentifiers string[] Array of product identifiers to obtain
type PRODUCT_CATEGORY Optional type of products to fetch, can be SUBSCRIPTION or NON_SUBSCRIPTION. SUBSCRIPTION by default. Ignored in iOS.

PurchaseStoreProductOptions

Prop Type Description
product PurchasesStoreProduct The product you want to purchase
googleProductChangeInfo GoogleProductChangeInfo | null Android only. Optional GoogleProductChangeInfo you wish to upgrade from containing the oldProductIdentifier and the optional prorationMode.
googleIsPersonalizedPrice boolean | null Android and Google only. Optional boolean indicates personalized pricing on products available for purchase in the EU. For compliance with EU regulations. User will see "This price has been customized for you" in the purchase dialog when true. See https://developer.android.com/google/play/billing/integrate#personalized-price for more info.

GoogleProductChangeInfo

Holds the information used when upgrading from another sku. For Android use only.

Prop Type Description
oldProductIdentifier string The old product identifier to upgrade from.
prorationMode PRORATION_MODE The [PRORATION_MODE] to use when upgrading the given oldSKU.

PurchaseDiscountedProductOptions

Prop Type Description
product PurchasesStoreProduct The product you want to purchase
discount PurchasesPromotionalOffer Discount to apply to this package. Retrieve this discount using getPromotionalOffer.

PurchasesPromotionalOffer

Prop Type
identifier string
keyIdentifier string
nonce string
signature string
timestamp number

PurchasePackageOptions

Prop Type Description
aPackage PurchasesPackage The Package you wish to purchase. You can get the Packages by calling getOfferings
googleProductChangeInfo GoogleProductChangeInfo | null Android only. Optional GoogleProductChangeInfo you wish to upgrade from containing the oldProductIdentifier and the optional prorationMode.
googleIsPersonalizedPrice boolean | null Android and Google only. Optional boolean indicates personalized pricing on products available for purchase in the EU. For compliance with EU regulations. User will see "This price has been customized for you" in the purchase dialog when true. See https://developer.android.com/google/play/billing/integrate#personalized-price for more info.

PurchaseSubscriptionOptionOptions

Prop Type Description
subscriptionOption SubscriptionOption The SubscriptionOption you wish to purchase. You can get the SubscriptionOption from StoreProducts by calling getOfferings
googleProductChangeInfo GoogleProductChangeInfo | null Android only. Optional GoogleProductChangeInfo you wish to upgrade from containing the oldProductIdentifier and the optional prorationMode.
googleIsPersonalizedPrice boolean | null Android and Google only. Optional boolean indicates personalized pricing on products available for purchase in the EU. For compliance with EU regulations. User will see "This price has been customized for you" in the purchase dialog when true. See https://developer.android.com/google/play/billing/integrate#personalized-price for more info.

PurchaseDiscountedPackageOptions

Prop Type Description
aPackage PurchasesPackage The Package you wish to purchase. You can get the Packages by calling getOfferings
discount PurchasesPromotionalOffer Discount to apply to this package. Retrieve this discount using getPromotionalOffer.

LogInResult

Holds the logIn result

Prop Type Description
customerInfo CustomerInfo The Customer Info for the user.
created boolean True if the call resulted in a new user getting created in the RevenueCat backend.

SyncObserverModeAmazonPurchaseOptions

Prop Type Description
productID string Product ID associated to the purchase.
receiptID string ReceiptId that represents the Amazon purchase.
amazonUserID string Amazon's userID. This parameter will be ignored when syncing a Google purchase.
isoCurrencyCode string | null Product's currency code in ISO 4217 format.
price number | null Product's price.

IntroEligibility

Holds the introductory price status

Prop Type Description
status INTRO_ELIGIBILITY_STATUS The introductory price eligibility status
description string Description of the status

GetPromotionalOfferOptions

Prop Type Description
product PurchasesStoreProduct The PurchasesStoreProduct the user intends to purchase.
discount PurchasesStoreProductDiscount The PurchasesStoreProductDiscount to apply to the product.

Type Aliases

CustomerInfoUpdateListener

Listener used on updated customer info

(customerInfo: CustomerInfo): void

PurchasesCallbackId

string

MakePurchaseResult

{ productIdentifier: string; customerInfo: CustomerInfo; }

LogHandler

(logLevel: LOG_LEVEL, message: string): void

Enums

ENTITLEMENT_VERIFICATION_MODE

Members Value Description
DISABLED "DISABLED" The SDK will not perform any entitlement verification.
INFORMATIONAL "INFORMATIONAL" Enable entitlement verification. If verification fails, this will be indicated with [VerificationResult.FAILED] in the [EntitlementInfos.verification] and [EntitlementInfo.verification] properties but parsing will not fail (i.e. Entitlements will still be granted). This can be useful if you want to handle verification failures to display an error/warning to the user or to track this situation but still grant access.

VERIFICATION_RESULT

Members Value Description
NOT_REQUESTED "NOT_REQUESTED" No verification was done. This value is returned when verification is not enabled in PurchasesConfiguration
VERIFIED "VERIFIED" Verification with our server was performed successfully.
FAILED "FAILED" Verification failed, possibly due to a MiTM attack.
VERIFIED_ON_DEVICE "VERIFIED_ON_DEVICE" Verification was performed on device.

PACKAGE_TYPE

Members Value Description
UNKNOWN "UNKNOWN" A package that was defined with a custom identifier.
CUSTOM "CUSTOM" A package that was defined with a custom identifier.
LIFETIME "LIFETIME" A package configured with the predefined lifetime identifier.
ANNUAL "ANNUAL" A package configured with the predefined annual identifier.
SIX_MONTH "SIX_MONTH" A package configured with the predefined six month identifier.
THREE_MONTH "THREE_MONTH" A package configured with the predefined three month identifier.
TWO_MONTH "TWO_MONTH" A package configured with the predefined two month identifier.
MONTHLY "MONTHLY" A package configured with the predefined monthly identifier.
WEEKLY "WEEKLY" A package configured with the predefined weekly identifier.

PRODUCT_CATEGORY

Members Value Description
NON_SUBSCRIPTION "NON_SUBSCRIPTION" A type of product for non-subscription.
SUBSCRIPTION "SUBSCRIPTION" A type of product for subscriptions.
UNKNOWN "UNKNOWN" A type of product for unknowns.

PRODUCT_TYPE

Members Value Description
CONSUMABLE "CONSUMABLE" A consumable in-app purchase.
NON_CONSUMABLE "NON_CONSUMABLE" A non-consumable in-app purchase. Only applies to Apple Store products.
NON_RENEWABLE_SUBSCRIPTION "NON_RENEWABLE_SUBSCRIPTION" A non-renewing subscription. Only applies to Apple Store products.
AUTO_RENEWABLE_SUBSCRIPTION "AUTO_RENEWABLE_SUBSCRIPTION" An auto-renewable subscription.
PREPAID_SUBSCRIPTION "PREPAID_SUBSCRIPTION" A subscription that is pre-paid. Only applies to Google Play products.
UNKNOWN "UNKNOWN" Unable to determine product type.

PERIOD_UNIT

Members Value
DAY "DAY"
WEEK "WEEK"
MONTH "MONTH"
YEAR "YEAR"
UNKNOWN "UNKNOWN"

RECURRENCE_MODE

Members Value Description
INFINITE_RECURRING 1 Pricing phase repeats infinitely until cancellation
FINITE_RECURRING 2 Pricing phase repeats for a fixed number of billing periods
NON_RECURRING 3 Pricing phase does not repeat

OFFER_PAYMENT_MODE

Members Value Description
FREE_TRIAL "FREE_TRIAL" Subscribers don't pay until the specified period ends
SINGLE_PAYMENT "SINGLE_PAYMENT" Subscribers pay up front for a specified period
DISCOUNTED_RECURRING_PAYMENT "DISCOUNTED_RECURRING_PAYMENT" Subscribers pay a discounted amount for a specified number of periods

PRORATION_MODE

Members Value Description
UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY 0
IMMEDIATE_WITH_TIME_PRORATION 1 Replacement takes effect immediately, and the remaining time will be prorated and credited to the user. This is the current default behavior.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE 2 Replacement takes effect immediately, and the billing cycle remains the same. The price for the remaining period will be charged. This option is only available for subscription upgrade.
IMMEDIATE_WITHOUT_PRORATION 3 Replacement takes effect immediately, and the new price will be charged on next recurrence time. The billing cycle stays the same.
IMMEDIATE_AND_CHARGE_FULL_PRICE 5 Replacement takes effect immediately, and the user is charged full price of new plan and is given a full billing cycle of subscription, plus remaining prorated time from the old plan.

LOG_LEVEL

Members Value
VERBOSE "VERBOSE"
DEBUG "DEBUG"
INFO "INFO"
WARN "WARN"
ERROR "ERROR"

INTRO_ELIGIBILITY_STATUS

Members Value Description
INTRO_ELIGIBILITY_STATUS_UNKNOWN 0 RevenueCat doesn't have enough information to determine eligibility.
INTRO_ELIGIBILITY_STATUS_INELIGIBLE 1 The user is not eligible for a free trial or intro pricing for this product.
INTRO_ELIGIBILITY_STATUS_ELIGIBLE 2 The user is eligible for a free trial or intro pricing for this product.
INTRO_ELIGIBILITY_STATUS_NO_INTRO_OFFER_EXISTS 3 There is no free trial or intro pricing for this product.

BILLING_FEATURE

Members Value Description
SUBSCRIPTIONS 0 Purchase/query for subscriptions.
SUBSCRIPTIONS_UPDATE 1 Subscriptions update/replace.
IN_APP_ITEMS_ON_VR 2 Purchase/query for in-app items on VR.
SUBSCRIPTIONS_ON_VR 3 Purchase/query for subscriptions on VR.
PRICE_CHANGE_CONFIRMATION 4 Launch a price change confirmation flow.

REFUND_REQUEST_STATUS

Members Value Description
SUCCESS 0 Apple has received the refund request.
USER_CANCELLED 1 User canceled submission of the refund request.
ERROR 2 There was an error with the request. See message for more details.

IN_APP_MESSAGE_TYPE

Members Value Description
BILLING_ISSUE 0 In-app messages to indicate there has been a billing issue charging the user.
PRICE_INCREASE_CONSENT 1 iOS-only. This message will show if you increase the price of a subscription and the user needs to opt-in to the increase.
GENERIC 2 iOS-only. StoreKit generic messages.

More Repositories

1

purchases-ios

In-app purchases and subscriptions made easy. Support for iOS, watchOS, tvOS, macOS, and visionOS.
Swift
2,286
star
2

react-native-purchases

React Native in-app purchases and subscriptions made easy. Support for iOS and Android.
TypeScript
727
star
3

purchases-flutter

Flutter plugin for in-app purchases and subscriptions. Supports iOS, macOS and Android.
Dart
600
star
4

purchases-android

Android in-app purchases and subscriptions made easy.
Kotlin
246
star
5

storekit2-demo-app

A demo app for the StoreKit2 blog post
Swift
155
star
6

purchases-unity

Unity in-app purchases and subscriptions made easy.
C#
91
star
7

purchases-kmp

RevenueCat SDK for Kotlin Multiplatform
Kotlin
68
star
8

cordova-plugin-purchases

Cordova in-app purchases and subscriptions made easy.
TypeScript
58
star
9

iOS-Subscription-Testing

The ultimate guide to testing iOS subscriptions
50
star
10

firestore-revenuecat-purchases

TypeScript
24
star
11

purchases-hybrid-common

Common files for the Hybrid SDKs
Swift
21
star
12

meta-memcache-py

Modern, pure python, memcache client with support for new meta commands.
Python
20
star
13

receipt-proxy

A simple proxy for Apple's receipt verification endpoint.
JavaScript
16
star
14

purchases-ios-spm

This mirror of RevenueCat's iOS SDK is optimized for integrating via SPM.
Swift
7
star
15

purchases-js

TypeScript
5
star
16

revenuecat-docs

Repository to hold RevenueCat's docs. This repository syncs docs' contents with Readme.com
Ruby
3
star
17

conference-talks

The home for slides, code samples, and links to video records for conference talks given by RevenueCat.
Swift
2
star
18

Dangerfile

RevenueCat's Danger file. Used for checking PRs on SDK projects. Used together with Danger. More info can be found here: http://danger.systems.
Ruby
1
star
19

rc-injector

Python dependency injector
Python
1
star
20

sdks-circleci-orb

A reusable package of YAML configuration for CircleCI.
Shell
1
star
21

unity-iap-observermode-sample

This repository holds a simple sample (mainly used for testing) Unity IAP app that works with purchases-unity in observer mode
C#
1
star
22

fastlane-plugin-revenuecat_internal

This repo contains shared fastlane automation logic used internally by RevenueCat's repos
Ruby
1
star
23

revenuecat-content-guide

The repository hold the Content Guide use for writing technical content
1
star
24

purchases-ios-docs

Hosts docs for purchases-ios
1
star
25

DroidconPaywallExample

This repository contains a simple paywall to demonstrate BL4 -> BL5 migration
Kotlin
1
star
26

react-native-purchases-docs

Documentation for react-native-purchases
1
star