Initialize the SDK with an API key. Called automatically on startup using the key from Project Settings. You only need to call this manually if you want to override the key at runtime.
Fetch customer info from RevenueCat. Results through OnCustomerInfoUpdated. FetchPolicy defaults to Default (cached); pass FetchCurrent to force a live read, for example on foreground to catch an expiry.
GetCachedCustomerInfo()
FRevenueCatCustomerInfo
Returns cached customer info from the last fetch.
IsEntitlementActive(EntitlementID)
bool
Check if a specific entitlement is active. Uses cached data - call FetchCustomerInfo() first if you need fresh data.
Auto-collect GAID (Android) / IDFA (iOS) and send to RevenueCat. Called automatically on SDK initialization - you only need to call this manually if you want to refresh identifiers later.
All attribution functions are fire-and-forget. No callback. Verify the values in the RevenueCat dashboard under the customer's attributes.
These functions present RevenueCat's native paywall UI, designed and configured in the RevenueCat dashboard. Requires iOS 16+ or Android with Compose.
Function
Returns
Description
PresentPaywall(OfferingID)
void
Present the native paywall UI. Pass an empty string to show the current offering. Results through OnPaywallCompleted.
PresentPaywallIfNeeded(EntitlementID)
void
Present the paywall only when the entitlement is inactive. Checks live entitlement state and honors a cached entitlement when offline. Results through OnPaywallCompleted.
A purchase flow finished (success, cancel, error, or already owned).
OnPurchasesRestored
FRevenueCatCustomerInfo CustomerInfo
Restore purchases completed.
OnCustomerInfoUpdated
FRevenueCatCustomerInfo CustomerInfo
Customer info changed: purchase, restore, login, logout, fetch, or a background SDK update. Treat as idempotent; it can fire more than once for one change.
These latent nodes derive from UBlueprintAsyncActionBase and provide output execution pins (OnSuccess / OnFailure / OnCancelled) directly in the Blueprint graph - no manual delegate binding needed.
Search for the node name in the Blueprint action palette (they are in the RevenueCat category).
Note: These async actions bind to the subsystem's delegates internally. The customer-info actions (Fetch Customer Info, Log In, Log Out, Sync Purchases) complete only on their own operation's result, not on a background SDK update. Avoid running two instances of the same action type at once, since they share a completion signal.
1.5.0 updates the bundled RevenueCat SDKs to Android 10.8.0 and iOS 5.78.0 (from 9.25.0 and 5.63.0). No nodes, pins, or C++ signatures changed, so your Blueprints and code keep working after a rebuild. Two things to handle on Android:
Set the project's Android Minimum SDK Version to 23 or higher. RevenueCat 10 runs on Google Play Billing 8, which requires API 23 (Android 6.0). You set this under Project Settings > Platforms > Android. Below 23, the Android build fails at manifest merge.
Check your consumable product types. RevenueCat 10 stops restoring consumed one-time products. If you sell consumables, confirm each one is set to the right type (consumable vs non-consumable) in the RevenueCat dashboard.
iOS needs nothing beyond a rebuild; the plugin ships the 5.78.0 frameworks, and the Android Compose runtime (now 1.7.0 / Material3 1.3.0) resolves through Gradle.
The 1.4.0 update is drop-in: no nodes or pins were removed or renamed, so existing Blueprints keep working after you refresh nodes. A few behaviors changed:
Fetch Customer Info gained a Fetch Policy input pin (and the function gained an optional parameter). It defaults to Default, which matches the old behavior. Pass FetchCurrent to force a live read.
Bind OnError for purchase failures. A failed purchase no longer reports through OnPurchaseCompleted with an Error result; it comes through OnError only. The Purchase Package async node already routes failures to OnFailure, so node users need no change.
Keep your OnCustomerInfoUpdated handler idempotent. It now also fires after purchases and restores, and can fire more than once for a single change. Set state from IsEntitlementActive rather than granting additively.
ActiveEntitlements now lists active entitlements only. If you looped over it expecting expired entries, they are gone. IsEntitlementActive is unchanged.
A cancelled or failed purchase no longer clears cached entitlements. If you re-fetched after a cancel to work around that, you can remove it.
On non-mobile platforms (Win64 editor), every function in the subsystem compiles and runs. Instead of calling the native SDK (which doesn't exist on desktop), it logs a message and completes deterministically.
You can:
Build and iterate on your Blueprint purchase flow in the editor
Compile and test C++ code without a device
Run PIE without crashes
The editor configures a stub on startup, so IsConfigured() returns true and OnConfigured fires. Every async operation completes its node instead of hanging: fetches return an empty result, and Purchase and Paywall report cancelled. There is no store, so no real entitlement is granted.