Skip to content

Releases: RevenueCat/purchases-unity

8.4.2

03 Nov 15:14

Choose a tag to compare

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

29 Oct 17:31

Choose a tag to compare

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

23 Oct 12:07

Choose a tag to compare

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

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 PaywallsPresenter API or PaywallsBehaviour MonoBehaviour 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 PaywallsBehaviour component
    • Supports both original template paywalls and Paywalls V2
    • Available on iOS and Android device builds (Unity Editor not supported for UI)
  • 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

📦 Installation

  1. Install the core RevenueCat Unity SDK (if not already installed)
  2. Install the new PurchasesUI SDK
  3. Configure the SDK as normal, then call PaywallsPresenter.Present() or CustomerCenterPresenter.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 25c7fb8 to 525d48c (#725) via dependabot[bot] (@dependabot[bot])

8.3.0

10 Oct 17:15

Choose a tag to compare

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

📦 Dependency Updates

🔄 Other Changes

  • Bump fastlane-plugin-revenuecat_internal from 3f7fffc to 25c7fb8 (#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 PresentedOfferingContext support (#710) via Cesar de la Vega (@vegaro)
  • Bump fastlane-plugin-revenuecat_internal from b35cae0 to 3f7fffc (#711) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from a8770fd to b35cae0 (#708) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from e555afb to a8770fd (#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

10 Oct 16:10

Choose a tag to compare

8.3.0-paywalls.beta.2 Pre-release
Pre-release

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

  1. Install the core RevenueCat Unity SDK (if not already installed) following the official docs.
  2. In Unity, import the downloaded RevenueCatUI.unitypackage.

Setup

Configure the core RevenueCat SDK as you normally would:

  • Add a Purchases component to a GameObject and set your API keys in the Inspector; or
  • Configure programmatically early in app startup using PurchasesConfiguration with useRuntimeSetup enabled on your Purchases component.

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:

  1. Add a PaywallsBehaviour component to any GameObject
  2. 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
  3. Wire up UnityEvent callbacks: OnPurchased, OnRestored, OnCancelled, OnNotPresented, OnError
  4. 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 options is 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.NotPresented if the user already has the entitlement

PaywallResult Values

The PaywallResult.Result property can have the following values:

  • Purchased - User completed a purchase
  • Restored - User restored their purchases
  • Cancelled - User dismissed the paywall without making a purchase
  • NotPresented - Paywall was not shown (user already has entitlement when using PresentIfNeeded)
  • Error - An error occurred

Platform notes

  • The paywall UI is only available on iOS and Android device builds.

RevenueCatUI

⚠️ Breaking Changes

API Refactors

  • Removed IsSupported method 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 PaywallOptions constructors and properties (#716)
    • Constructor accepting an OfferingIdentifier has been made internal.
    • OfferingIdentifier is now a read-only property derived from internal OfferingSelection
    • DisplayCloseButton is now set via constructor instead of being a settable property
    • Migration: Update your PaywallOptions creation:
      • Before: new PaywallOptions() { DisplayCloseButton = true }
      • After: new PaywallOptions(displayCloseButton: true)
    • New constructor accepting Purchases.Offering object: new PaywallOptions(offering, displayCloseButton: true)

✨ New Features

  • Added PaywallsBehaviour (#706) via Cesar de la Vega (@vegaro)
  • Added PresentedOfferingContext support (#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 3f7fffc to 25c7fb8 (#717) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from b35cae0 to 3f7fffc (#711) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from a8770fd to b35cae0 (#708) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from e555afb to a8770fd (#704) via dependabot[bot] (@dependabot[bot])

8.3.0-paywalls.beta.1

03 Oct 15:36

Choose a tag to compare

8.3.0-paywalls.beta.1 Pre-release
Pre-release

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

  1. Install the core RevenueCat Unity SDK (if not already installed) following the official docs.
  2. In Unity, import the downloaded RevenueCatUI.unitypackage.

Setup

Configure the core RevenueCat SDK as you normally would:

  • Add a Purchases component to a GameObject and set your API keys in the Inspector; or
  • Configure programmatically early in app startup using PurchasesConfiguration with useRuntimeSetup enabled on your Purchases component.

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()bool
  • RevenueCatUI.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:

  • Purchased
  • Restored
  • Cancelled
  • NotPresented
  • Error

Platform notes

  • The paywall UI is only available on iOS and Android device builds.

8.2.5

02 Oct 17:07
6d1340d

Choose a tag to compare

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 autoSyncPurchases to true on runtime setups (#693) via Cesar de la Vega (@vegaro)

📦 Dependency Updates

🔄 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 1593f78 to 7508f17 (#689) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from e1c0e04 to 1593f78 (#683) via dependabot[bot] (@dependabot[bot])
  • Update CircleCI orb (#680) via Cesar de la Vega (@vegaro)
  • Bump fastlane-plugin-revenuecat_internal from 401d148 to e1c0e04 (#679) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from a6dc551 to 401d148 (#676) via dependabot[bot] (@dependabot[bot])

7.8.0

29 Sep 16:25

Choose a tag to compare

RevenueCat SDK

📦 Dependency Updates

🔄 Other Changes

8.2.4

18 Sep 07:32

Choose a tag to compare

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

🔄 Other Changes

  • Introduce RevenueCatUI empty package (#664) via Facundo Menzella (@facumenzella)
  • Bump fastlane-plugin-revenuecat_internal from 489faef to a6dc551 (#669) via dependabot[bot] (@dependabot[bot])

8.2.3

12 Sep 11:48

Choose a tag to compare

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

🔄 Other Changes