Releases: RevenueCat/purchases-unity
8.4.2
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
📦 Dependency Updates
8.4.1
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
📦 Dependency Updates
8.4.0
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
📦 Dependency Updates
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.11.0 (#727) via RevenueCat Git Bot (@RCGitBot)
RevenueCatUI SDK
RevenueCatUI adds Paywalls and Customer Center to the RevenueCat Unity SDK. Paywalls and Customer Center can be configured in the RevenueCat dashboard and presented on iOS and Android with one line of code.
✨ New Features
- Paywalls: Present paywalls configured in the RevenueCat dashboard using the
PaywallsPresenterAPI orPaywallsBehaviourMonoBehaviour component- Use
await PaywallsPresenter.Present()to show a paywall - Use
await PaywallsPresenter.PresentIfNeeded(requiredEntitlementIdentifier)to conditionally present based on entitlement status - Configure paywalls through Unity's Inspector with the
PaywallsBehaviourcomponent - Supports both original template paywalls and Paywalls V2
- Available on iOS and Android device builds (Unity Editor not supported for UI)
- Use
- Customer Center: Provide a self-service interface for users to manage their subscriptions
- Use
await CustomerCenterPresenter.Present()to show the Customer Center - Allows users to view subscription details, manage billing, and access support
- Fully customizable through the RevenueCat dashboard
- Available on iOS and Android device builds
- Use
📦 Installation
- Install the core RevenueCat Unity SDK (if not already installed)
- Install the new PurchasesUI SDK
- Configure the SDK as normal, then call
PaywallsPresenter.Present()orCustomerCenterPresenter.Present()from any script
For more details, see the Paywalls documentation and Customer Center documentation
🔄 Other Changes
- Add importing PurchasesUI to IntegrationTests (#730) via Cesar de la Vega (@vegaro)
- Bump fastlane-plugin-revenuecat_internal from
25c7fb8to525d48c(#725) via dependabot[bot] (@dependabot[bot])
8.3.0
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
✨ New Features
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.10.0 (#718) via RevenueCat Git Bot (@RCGitBot)
📦 Dependency Updates
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.9.1 (#713) via RevenueCat Git Bot (@RCGitBot)
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.9.0 (#696) via RevenueCat Git Bot (@RCGitBot)
🔄 Other Changes
- Bump fastlane-plugin-revenuecat_internal from
3f7fffcto25c7fb8(#717) via dependabot[bot] (@dependabot[bot]) - Fix iOS compilation of RevenueCatUI when symlink sources enabled (#715) via Cesar de la Vega (@vegaro)
- Fix automatic bumps (#714) via Cesar de la Vega (@vegaro)
- Add
PresentedOfferingContextsupport (#710) via Cesar de la Vega (@vegaro) - Bump fastlane-plugin-revenuecat_internal from
b35cae0to3f7fffc(#711) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
a8770fdtob35cae0(#708) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
e555afbtoa8770fd(#704) via dependabot[bot] (@dependabot[bot]) - Update fastlane-plugin-revenuecat_internal to e555afb (#695) via Cesar de la Vega (@vegaro)
8.3.0-paywalls.beta.2
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat UI for Unity (Beta)
RevenueCat UI adds native paywall presentation to the RevenueCat Unity SDK. It lets you present a paywall configured in the RevenueCat dashboard on iOS and Android with one line of code.
Requirements
- RevenueCat Unity SDK installed in your project
- Unity Editor is not supported for displaying the paywall UI
Installation
- Install the core RevenueCat Unity SDK (if not already installed) following the official docs.
- In Unity, import the downloaded
RevenueCatUI.unitypackage.
Setup
Configure the core RevenueCat SDK as you normally would:
- Add a
Purchasescomponent to a GameObject and set your API keys in the Inspector; or - Configure programmatically early in app startup using
PurchasesConfigurationwithuseRuntimeSetupenabled on yourPurchasescomponent.
Presenting a paywall
Use the static API from any script. The call returns a Task<RevenueCatUI.PaywallResult> you can await.
using System.Threading.Tasks;
using RevenueCatUI;
public class ShowPaywallExample
{
public async Task Show()
{
var result = await PaywallsPresenter.Present();
switch (result.Result)
{
case PaywallResultType.Purchased:
break;
case PaywallResultType.Restored:
break;
case PaywallResultType.NotPresented:
break;
case PaywallResultType.Cancelled:
break;
case PaywallResultType.Error:
break;
}
}
}Alternatively, present the paywall only if the user does not have a required entitlement:
using System.Threading.Tasks;
using RevenueCatUI;
public class ConditionalPaywallExample
{
public async Task ShowIfNeeded()
{
var result = await PaywallsPresenter.PresentIfNeeded(
requiredEntitlementIdentifier: "pro"
);
}
}Using PaywallsBehaviour Component
For developers who prefer configuring paywalls through Unity's Inspector, you can use the PaywallsBehaviour MonoBehaviour component:
- Add a
PaywallsBehaviourcomponent to any GameObject - Configure the options in the Inspector:
- Offering Identifier: Leave empty to use current offering, or specify an offering ID
- Display Close Button: Whether to show a close button (original templates only)
- Required Entitlement Identifier: Optional - paywall will only show if user lacks this entitlement
- Wire up UnityEvent callbacks:
OnPurchased,OnRestored,OnCancelled,OnNotPresented,OnError - Call
PresentPaywall()method (e.g., from a UI Button's OnClick event)
This provides an alternative to the code-based PaywallsPresenter API for Unity Editor workflows.
Configuring PaywallOptions
PaywallOptions allows you to customize how the paywall is presented. There are three ways to create it:
Present the current offering
new PaywallOptions()Present a specific offering by identifier
new PaywallOptions("my_offering_id")Present from an Offering object
var offerings = await Purchases.GetOfferings();
var offering = offerings.Current;
new PaywallOptions(offering)Display Close Button
You can optionally display a close button by passing displayCloseButton: true to any constructor:
new PaywallOptions(displayCloseButton: true)
new PaywallOptions("my_offering_id", displayCloseButton: true)
new PaywallOptions(offering, displayCloseButton: true)Note: The displayCloseButton parameter only applies to original template paywalls and is ignored for Paywalls V2.
API reference
PaywallsPresenter Methods
-
PaywallsPresenter.Present(PaywallOptions options = null)→Task<PaywallResult>- Presents a paywall configured in the RevenueCat dashboard
- If
optionsis null, presents the current offering without a close button
-
PaywallsPresenter.PresentIfNeeded(string requiredEntitlementIdentifier, PaywallOptions options = null)→Task<PaywallResult>- Presents a paywall only if the user doesn't have the specified entitlement
- Returns
PaywallResultType.NotPresentedif the user already has the entitlement
PaywallResult Values
The PaywallResult.Result property can have the following values:
Purchased- User completed a purchaseRestored- User restored their purchasesCancelled- User dismissed the paywall without making a purchaseNotPresented- Paywall was not shown (user already has entitlement when usingPresentIfNeeded)Error- An error occurred
Platform notes
- The paywall UI is only available on iOS and Android device builds.
RevenueCatUI
⚠️ Breaking Changes
API Refactors
- Removed
IsSupportedmethod from RevenueCatUI (#707) via Cesar de la Vega (@vegaro)- This method has been removed as it's no longer needed
- Migration: Remove any checks for
PaywallsPresenter.IsSupported()from your code
PaywallOptions API Changes
- Refactored
PaywallOptionsconstructors and properties (#716)- Constructor accepting an
OfferingIdentifierhas been made internal. OfferingIdentifieris now a read-only property derived from internalOfferingSelectionDisplayCloseButtonis now set via constructor instead of being a settable property- Migration: Update your
PaywallOptionscreation:- Before:
new PaywallOptions() { DisplayCloseButton = true } - After:
new PaywallOptions(displayCloseButton: true)
- Before:
- New constructor accepting
Purchases.Offeringobject:new PaywallOptions(offering, displayCloseButton: true)
- Constructor accepting an
✨ New Features
- Added
PaywallsBehaviour(#706) via Cesar de la Vega (@vegaro) - Added
PresentedOfferingContextsupport (#710) via Cesar de la Vega (@vegaro)
RevenueCat SDK
📦 Dependency Updates
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.10.0 (#718) via RevenueCat Git Bot (@RCGitBot)
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.9.1 (#713) via RevenueCat Git Bot (@RCGitBot)
🔄 Other Changes
- Update Subtester and IntegrationTests to 6000.2.6f2 (#701) via Cesar de la Vega (@vegaro)
- Bump fastlane-plugin-revenuecat_internal from
3f7fffcto25c7fb8(#717) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
b35cae0to3f7fffc(#711) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
a8770fdtob35cae0(#708) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
e555afbtoa8770fd(#704) via dependabot[bot] (@dependabot[bot])
8.3.0-paywalls.beta.1
RevenueCat UI for Unity (Beta)
RevenueCat UI adds native paywall presentation to the RevenueCat Unity SDK. It lets you present a paywall configured in the RevenueCat dashboard on iOS and Android with one line of code.
Requirements
- RevenueCat Unity SDK installed in your project
- Unity Editor is not supported for displaying the paywall UI
Installation
- Install the core RevenueCat Unity SDK (if not already installed) following the official docs.
- In Unity, import the downloaded
RevenueCatUI.unitypackage.
Setup
Configure the core RevenueCat SDK as you normally would:
- Add a
Purchasescomponent to a GameObject and set your API keys in the Inspector; or - Configure programmatically early in app startup using
PurchasesConfigurationwithuseRuntimeSetupenabled on yourPurchasescomponent.
Presenting a paywall
Use the static API from any script. The call returns a Task<RevenueCatUI.PaywallResult> you can await.
using System.Threading.Tasks;
using RevenueCatUI;
public class ShowPaywallExample
{
public async Task Show()
{
var result = await PaywallsPresenter.Present(new PaywallOptions
{
OfferingIdentifier = "default",
DisplayCloseButton = true
});
switch (result.Result)
{
case PaywallResultType.Purchased:
break;
case PaywallResultType.Restored:
break;
case PaywallResultType.NotPresented:
break;
case PaywallResultType.Cancelled:
break;
case PaywallResultType.Error:
break;
}
}
}Alternatively, present the paywall only if the user does not have a required entitlement:
using System.Threading.Tasks;
using RevenueCatUI;
public class ConditionalPaywallExample
{
public async Task ShowIfNeeded()
{
var result = await PaywallsPresenter.PresentIfNeeded(
requiredEntitlementIdentifier: "pro",
options: new PaywallOptions { OfferingIdentifier = "default" }
);
}
}API reference
RevenueCatUI.PaywallsPresenter.IsSupported()→boolRevenueCatUI.PaywallsPresenter.Present(PaywallOptions options = null)→Task<PaywallResult>RevenueCatUI.PaywallsPresenter.PresentIfNeeded(string requiredEntitlementIdentifier, PaywallOptions options = null)→Task<PaywallResult>
PaywallOptions:
OfferingIdentifier(string, optional): offering to present. If omitted, the current offering is used.DisplayCloseButton(bool, default: true): only applies to original template paywalls. Ignored for Paywalls V2.
PaywallResult.Result values:
PurchasedRestoredCancelledNotPresentedError
Platform notes
- The paywall UI is only available on iOS and Android device builds.
8.2.5
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
🐞 Bugfixes
- BEHAVIOR CHANGE Change wrong default of
autoSyncPurchasestotrueon runtime setups (#693) via Cesar de la Vega (@vegaro)
📦 Dependency Updates
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.8.0 (#678) via RevenueCat Git Bot (@RCGitBot)
🔄 Other Changes
- Update EDM4U in Subtester (#690) via Cesar de la Vega (@vegaro)
- Update baseProjectTemplate.gradle (#691) via Cesar de la Vega (@vegaro)
- Update changelog for release v7.8.0 (#687) via Antonio Pallares (@ajpallares)
- Add CODEOWNERS file (#688) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
1593f78to7508f17(#689) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
e1c0e04to1593f78(#683) via dependabot[bot] (@dependabot[bot]) - Update CircleCI orb (#680) via Cesar de la Vega (@vegaro)
- Bump fastlane-plugin-revenuecat_internal from
401d148toe1c0e04(#679) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
a6dc551to401d148(#676) via dependabot[bot] (@dependabot[bot])
7.8.0
RevenueCat SDK
📦 Dependency Updates
- Updates purchases-hybrid-common to 14.3.0 (#684) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- [v7] Prepare for next release (#685) via Antonio Pallares (@ajpallares)
8.2.4
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
📦 Dependency Updates
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.7.0 (#670) via RevenueCat Git Bot (@RCGitBot)
🔄 Other Changes
- Introduce RevenueCatUI empty package (#664) via Facundo Menzella (@facumenzella)
- Bump fastlane-plugin-revenuecat_internal from
489faeftoa6dc551(#669) via dependabot[bot] (@dependabot[bot])
8.2.3
Warning
If you don't have any login system in your app, please make sure your one-time purchase products have been correctly configured in the RevenueCat dashboard as either consumable or non-consumable. If they're incorrectly configured as consumables, RevenueCat will consume these purchases. This means that users won't be able to restore them from version 8.0.0 onward.
Non-consumables are products that are meant to be bought only once, for example, lifetime subscriptions.
RevenueCat SDK
📦 Dependency Updates
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.6.0 (#666) via RevenueCat Git Bot (@RCGitBot)
- [AUTOMATIC BUMP] Updates purchases-hybrid-common to 17.5.1 (#663) via RevenueCat Git Bot (@RCGitBot)