![]() |
VOOZH | about |
dotnet add package MsbSvg.RevenueCat.Maui.Android.PaywallUI --version 9.2.0.28
NuGet\Install-Package MsbSvg.RevenueCat.Maui.Android.PaywallUI -Version 9.2.0.28
<PackageReference Include="MsbSvg.RevenueCat.Maui.Android.PaywallUI" Version="9.2.0.28" />
<PackageVersion Include="MsbSvg.RevenueCat.Maui.Android.PaywallUI" Version="9.2.0.28" />Directory.Packages.props
<PackageReference Include="MsbSvg.RevenueCat.Maui.Android.PaywallUI" />Project file
paket add MsbSvg.RevenueCat.Maui.Android.PaywallUI --version 9.2.0.28
#r "nuget: MsbSvg.RevenueCat.Maui.Android.PaywallUI, 9.2.0.28"
#:package MsbSvg.RevenueCat.Maui.Android.PaywallUI@9.2.0.28
#addin nuget:?package=MsbSvg.RevenueCat.Maui.Android.PaywallUI&version=9.2.0.28Install as a Cake Addin
#tool nuget:?package=MsbSvg.RevenueCat.Maui.Android.PaywallUI&version=9.2.0.28Install as a Cake Tool
RevenueCat Android Paywall UI bindings for .NET MAUI.
Display RevenueCat's native Paywall UI β including V2 component-based paywalls designed in the RevenueCat Dashboard β on Android in your .NET MAUI app.
No official MAUI binding exists for the RevenueCat Paywall UI layer. This package fills that gap with a production-ready solution.
RevenueCat's purchases-ui for Android is built entirely with Jetpack Compose. Creating traditional C# bindings for 30+ Compose libraries is impractical. This package takes a smarter approach:
| Layer | What It Does |
|---|---|
| Java Bridge AAR | Wraps PaywallActivity launch β no Compose binding needed on the C# side |
purchases-ui-9.2.0.aar |
RevenueCat's official Paywall UI library |
| ~33 native AAR/JAR files | All required Jetpack Compose, Material 3, Coil, and other transitive dependencies |
| C# Wrapper | Clean RevenueCatPaywallUI static API β configure once, show paywall with one line |
The core RevenueCat SDK (purchases) and its C# bindings are not included β they come from the required Kebechet.Maui.RevenueCat.Android dependency. This separation prevents duplicate class conflicts and keeps each package focused on its responsibility.
Your MAUI project must have the RevenueCat core Android SDK installed:
Kebechet.Maui.RevenueCat.Android (9.2.0.2+)This package is automatically pulled as a dependency, but it's good practice to reference it explicitly so you have access to the full C# API (CustomerInfo, Purchases, etc.).
dotnet add package Kebechet.Maui.RevenueCat.Android # Core SDK + C# bindings
dotnet add package MsbSvg.RevenueCat.Maui.Android.PaywallUI # Paywall UI (this package)
That's it. The bundled .targets file automatically injects the native AAR/JAR files into your Android build. No manual configuration needed.
Platforms/Android/MainApplication.csusing MsbSvg.RevenueCat.Maui.Android.PaywallUI;
[Application]
public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
: base(handle, ownership) { }
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
public override void OnCreate()
{
base.OnCreate();
RevenueCatPaywallUI.Configure(this, "your_google_api_key");
}
}
private void OnShowPaywallClicked(object sender, EventArgs e)
{
#if ANDROID
var activity = Platform.CurrentActivity;
if (activity != null)
{
RevenueCatPaywallUI.ShowPaywall(activity);
}
#endif
}
RevenueCatPaywallUI.ShowPaywall(activity, offeringId: "premium_offering");
RevenueCatPaywallUI.ConfigureAndShowPaywall(activity, "your_google_api_key");
RevenueCat Dashboard offers three presentation styles. Here's how they behave on each platform:
| Dashboard Setting | iOS Behavior | Android Behavior |
|---|---|---|
| Full Screen | Full-screen modal | Full-screen Activity β |
| Sheet | Bottom sheet modal | Full-screen Activity (Android convention) |
| Navigation Push | Pushed onto nav stack | Full-screen Activity (back stack) β |
On Android, PaywallActivity always launches as a full-screen Activity β this is the standard Android platform convention. The user can dismiss it by pressing the back button or the close button within the paywall. All three dashboard modes produce the same behavior on Android.
| Method | Description |
|---|---|
RevenueCatPaywallUI.Configure(context, apiKey) |
Initialize the RevenueCat SDK. Call once at app startup. |
RevenueCatPaywallUI.IsConfigured |
Returns true if the SDK is already configured. |
RevenueCatPaywallUI.ShowPaywall(activity) |
Launch the paywall for the default offering. |
RevenueCatPaywallUI.ShowPaywall(activity, offeringId) |
Launch the paywall for a specific offering. |
RevenueCatPaywallUI.ConfigureAndShowPaywall(activity, apiKey) |
Configure + launch in a single call. |
Your MAUI C# Code
β RevenueCatPaywallUI.ShowPaywall(activity)
β JNI β RevenueCatPaywallBridge.java (bundled AAR)
β PaywallContract.createIntent()
β PaywallActivity (Jetpack Compose β full screen)
β Native V1 / V2 paywall rendering
The bridge uses PaywallContract.createIntent() to construct the Intent and launches PaywallActivity as a standard Android Activity. Jetpack Compose handles all rendering inside PaywallActivity β your MAUI code never touches Compose directly.
| Requirement | Version |
|---|---|
| .NET | 9.0+ / 10.0+ |
| Android min SDK | API 24 (Android 7.0) |
| RevenueCat SDK | purchases:9.2.0 / purchases-ui:9.2.0 |
| Paywall types | V1 (template-based) β Β· V2 (component-based) β |
This is a RevenueCat Dashboard configuration issue, not a code problem:
Clean the build artifacts and rebuild:
dotnet clean
rm -rf obj/ bin/
dotnet build
Make sure both packages are installed:
Kebechet.Maui.RevenueCat.Android β core SDK with C# bindingsMsbSvg.RevenueCat.Maui.Android.PaywallUI β Paywall UI (this package)If you see ClassNotFoundException for Compose/AndroidX classes, ensure your build is not stripping native AAR files.
If another package in your project provides the same native library (e.g., OkHttp, Play Services), you may see duplicate class errors. This package is designed to work alongside Kebechet.Maui.RevenueCat.Android without conflicts. If you're using additional packages that bundle the same native libraries, you may need to exclude the conflicting dependency from one side.
MsbSvg.RevenueCat.Maui.Android.PaywallUI (this package)
βββ Paywall UI (purchases-ui-9.2.0.aar)
βββ Jetpack Compose Runtime, UI, Foundation, Animation
βββ Material 3
βββ Coil (image loading for paywall assets)
βββ Compose integrations (activity-compose, lifecycle-compose, etc.)
βββ Java Bridge (RevenueCatBridge-release.aar)
βββ C# wrapper (RevenueCatPaywallUI.cs)
Kebechet.Maui.RevenueCat.Android (required dependency)
βββ Core RevenueCat SDK (purchases-9.2.0.aar)
βββ Google Play Billing
βββ Play Services
βββ OkHttp / OkIO
βββ Kotlin Serialization
βββ Full C# bindings (CustomerInfo, Purchases, etc.)
If this package saved you time and you'd like to say thanks β please feed a stray animal πΆπ±
No donations needed. Just a small act of kindness for a friend on the street.
Musab Sevgi
MIT β see for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-android36.0 net10.0-android36.0 is compatible. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 9.2.0.28 | 144 | 3/12/2026 | |
| 9.2.0.26 | 127 | 3/12/2026 | 9.2.0.26 is deprecated because it has critical bugs. |
| 9.2.0.24 | 126 | 3/11/2026 | 9.2.0.24 is deprecated because it has critical bugs. |
| 9.2.0.23 | 139 | 3/11/2026 | 9.2.0.23 is deprecated because it has critical bugs. |
| 9.2.0.22 | 120 | 3/11/2026 | 9.2.0.22 is deprecated because it has critical bugs. |
| 9.2.0.7 | 127 | 3/11/2026 | 9.2.0.7 is deprecated because it has critical bugs. |
| 9.2.0.3 | 132 | 3/11/2026 | 9.2.0.3 is deprecated because it has critical bugs. |
| 9.2.0.2 | 123 | 3/11/2026 | 9.2.0.2 is deprecated because it has critical bugs. |
| 9.2.0.1 | 132 | 3/11/2026 | 9.2.0.1 is deprecated because it has critical bugs. |
v9.2.0.28: Stable production release. Lean UI-only package β all core SDK dependencies (OkHttp, OkIO, Billing, Play Services, Kotlin Serialization) come from Kebechet.Maui.RevenueCat.Android. Supports V1 template and V2 component-based paywalls.