Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
20d55de
Display Virtual Currencies in Customer Center (#2652)
fire-at-will Sep 10, 2025
ec1a127
File Repository (#2634)
JZDesign Sep 11, 2025
933e0c2
Bump fastlane-plugin-revenuecat_internal from `7d97553` to `489faef` …
dependabot[bot] Sep 15, 2025
35f0dee
Bump fastlane-plugin-revenuecat_internal from `489faef` to `a6dc551` …
dependabot[bot] Sep 15, 2025
b084bf1
Fix bundled font families when using assets folder (#2672)
tonidero Sep 16, 2025
36b10f0
Bump rexml from 3.4.1 to 3.4.2 (#2676)
dependabot[bot] Sep 23, 2025
a665ddf
Bump fastlane-plugin-revenuecat_internal from `a6dc551` to `401d148` …
dependabot[bot] Sep 24, 2025
02dec47
Fix promo offer button CTA in Customer Center (#2682)
vegaro Sep 24, 2025
d4014ec
Enable Test Store (#2685)
ajpallares Sep 25, 2025
1bc9231
Remove unused kotlinCompilerExtensionVersion (#2691)
skydoves Sep 29, 2025
61bb567
Reimplement placeholder with Modifier.Node (#2677)
skydoves Sep 29, 2025
706fcb9
Fix Expired badge in Customer Center dark mode (#2693)
vegaro Sep 30, 2025
92c6082
Bump fastlane-plugin-revenuecat_internal from `401d148` to `7508f17` …
dependabot[bot] Sep 30, 2025
69c8325
Add Airbridge device ID subscriber attribute (#2696)
limdauto Sep 30, 2025
474c2fc
Expose `launch` and `launchIfNeeded` to Java (#2695)
vegaro Sep 30, 2025
92b1456
Adds new tab ID properties to `TabsComponent`. (#2577)
JayShortway Oct 1, 2025
747ea6b
Add CODEOWNERS (#2664)
facumenzella Oct 1, 2025
b5fde30
[EXTERNAL] Fix incorrect exception use in test (#2674) via @nikit19 (…
tonidero Oct 2, 2025
59df543
Revert kotlinCompilerExtensionVersion for MagicWeatherCompose and Cus…
skydoves Oct 2, 2025
d02cbab
Update fastlane-plugin-revenuecat_internal to e555afb (#2705)
vegaro Oct 2, 2025
2429da2
Paywalls -> Video Component (#2680)
JZDesign Oct 3, 2025
268eef1
Fix deadlock in `allowSharingPlayStoreAccount` (#2707)
vegaro Oct 3, 2025
f2b51c8
Correct Opt In for FileRepository (#2709)
JZDesign Oct 3, 2025
762c466
Bump fastlane-plugin-revenuecat_internal from `e555afb` to `a8770fd` …
dependabot[bot] Oct 6, 2025
58170f3
Bump fastlane-plugin-revenuecat_internal from `a8770fd` to `3f7fffc` …
dependabot[bot] Oct 7, 2025
ce2f040
Add E2E Test app for integration tests (#2715)
tonidero Oct 8, 2025
1e0c2a6
Add support for the Test Store (#2710)
tonidero Oct 9, 2025
9c455ef
Add Customer Center per-view listener for hybrids (#2713)
facumenzella Oct 9, 2025
2540a03
Disable offline entitlements in test store (#2718)
tonidero Oct 9, 2025
d82f3a4
Bump fastlane-plugin-revenuecat_internal from `3f7fffc` to `25c7fb8` …
dependabot[bot] Oct 9, 2025
c639984
Add `TestStoreSimulatedPurchaseError` error code (#2716)
tonidero Oct 9, 2025
5dc6c0c
Finalize video component to include a checksum, and optimize memory u…
JZDesign Oct 9, 2025
165bae0
Add test store maestro test (#2711)
tonidero Oct 13, 2025
d5b23b8
Turn on Video Component (#2725)
JZDesign Oct 14, 2025
6bcc755
Fix potential `NoClassDefFoundError` crash finding `Icons` caused by …
vegaro Oct 14, 2025
46110ce
Adds new experimental `storefrontLocale` APIs. (#2726)
JayShortway Oct 15, 2025
9c3f632
Fixes more Icons crashing with `NoClassDefFoundError` when using Mate…
vegaro Oct 15, 2025
187db29
CHANGELOG
vegaro Oct 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ version: 2.1
orbs:
android: circleci/[email protected]
gcp-cli: circleci/[email protected]
revenuecat: revenuecat/sdks-common-config@3.0.0
revenuecat: revenuecat/sdks-common-config@3.8.0
codecov: codecov/[email protected]

parameters:
Expand Down Expand Up @@ -803,6 +803,41 @@ jobs:
command: |
./gradlew ui:revenuecatui:connectedDebugAndroidTest

run-maestro-e2e-tests:
description: "Run Maestro tests for Paywall Tester app"
<<: *android-machine-emulator
steps:
- checkout
- attach_workspace:
at: .
- install-sdkman
- run:
name: Replace API_KEY (Using Test store API key from Production Integration Tests Android project)
working_directory: test-apps/e2etests/src/main/java/com/revenuecat/e2etests/
command: |
sed -i s/\"api_key_to_replace\"/\"$TEST_STORE_API_KEY\"/ Constants.kt
- android/create_avd:
avd_name: test-e2e-tester
system_image: system-images;android-32;google_apis;x86_64
install: true
- android/start_emulator:
avd_name: test-e2e-tester
post_emulator_launch_assemble_command: ./gradlew test-apps:e2etests:assembleDebug
- android/restore_gradle_cache
- run:
name: Install E2E Tester on emulator
command: |
adb install test-apps/e2etests/build/outputs/apk/debug/e2etests-debug.apk
- revenuecat/install-maestro
- run:
name: Run Maestro tests
command: |
maestro test --format junit --output maestro/report.xml maestro/
- store_artifacts:
path: ~/.maestro/tests/
- store_test_results:
path: maestro/report.xml

update-paywall-preview-resources-submodule:
docker:
- image: cimg/ruby:3.2.0
Expand Down Expand Up @@ -933,6 +968,9 @@ workflows:
- emerge_purchases_ui_snapshot_tests:
requires:
- prepare-tests
- run-maestro-e2e-tests:
requires:
- prepare-tests
- integration-tests-build: *release-branches
- purchases-integration-tests-build: *release-branches
- run-firebase-tests-purchases-custom-entitlement-computation-integration-test:
Expand All @@ -957,6 +995,7 @@ workflows:
- assemble-purchase-tester
- assemble-paywall-tester-release
- run-backend-integration-tests
- run-maestro-e2e-tests
- run-revenuecatui-ui-tests
- run-firebase-tests
- run-firebase-tests-purchases-integration-test
Expand Down
11 changes: 11 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# CODEOWNERS for purchases-android

# Default owners
* @RevenueCat/coresdk

# Customer Center code and related UI tests
/purchases/src/**/com/revenuecat/purchases/customercenter/** @RevenueCat/customer-center
/ui/revenuecatui/src/**/com/revenuecat/purchases/ui/revenuecatui/customercenter/** @RevenueCat/customer-center

# Paywalls
/ui/revenuecatui/src/**/com/revenuecat/purchases/ui/revenuecatui/templates/** @RevenueCat/monetization
55 changes: 42 additions & 13 deletions CHANGELOG.latest.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,56 @@
## RevenueCat SDK
> [!NOTE]
> This release brings all non-breaking changes between SDK versions 9.4.0 and 9.6.0 to major 8, so developers that don't/can't use major 9, can still get the latest updates.
> This release brings all non-breaking changes between SDK versions 9.6.0 and 9.11.0 to major 8, so developers that don't/can't use major 9, can still get the latest updates. meant to be bought only once, for example, lifetime subscriptions.

### ✨ New Features
* Add `RevenueCatBackupAgent` (#2625) via Toni Rico (@tonidero)
* Add preferred UI locale override for RevenueCat UI components (#2620) via Josh Holtz (@joshdholtz)
* Add option to disable automatic ID collection when setting attribution network IDs at configuration time (#2643) via Toni Rico (@tonidero)
* Adds new experimental `storefrontLocale` APIs. (#2726) via JayShortway (@JayShortway)
* Turn on Video Component (#2725) via Jacob Rakidzich (@JZDesign)
* Add support for the Test Store (#2710) via Toni Rico (@tonidero)
* Add Airbridge device ID subscriber attribute (#2696) via Lim Hoang (@limdauto)
* Enable Test Store (#2685) via Antonio Pallares (@ajpallares)
### 🐞 Bugfixes
* Handle payment pending errors when restoring properly (#2635) via Toni Rico (@tonidero)
* Fix deadlock in `allowSharingPlayStoreAccount` (#2707) via Cesar de la Vega (@vegaro)

## RevenueCatUI SDK
### Paywallv2
#### ✨ New Features
* MON-1193 Support delayed close button (Component Transitions) (#2623) via Jacob Rakidzich (@JZDesign)
* Expose `launch` and `launchIfNeeded` to Java (#2695) via Cesar de la Vega (@vegaro)
#### 🐞 Bugfixes
* Fix PaywallDialog going over screen size on Android 35+ (#2642) via Toni Rico (@tonidero)
* Fix bundled font families when using assets folder (#2672) via Toni Rico (@tonidero)
### Customer Center
#### ✨ New Features
* Add button_text to ScreenOffering (#2638) via Facundo Menzella (@facumenzella)
* Add Customer Center per-view listener for hybrids (#2713) via Facundo Menzella (@facumenzella)
* Display Virtual Currencies in Customer Center (#2652) via Will Taylor (@fire-at-will)
#### 🐞 Bugfixes
* Fixes more Icons crashing with `NoClassDefFoundError` when using Material 1.4.0 (#2732) via Cesar de la Vega (@vegaro)
* Fix potential `NoClassDefFoundError` crash finding `Icons` caused by material3 1.4.0 (#2727) via Cesar de la Vega (@vegaro)
* Fix Expired badge in Customer Center dark mode (#2693) via Cesar de la Vega (@vegaro)
* Fix promo offer button CTA in Customer Center (#2682) via Cesar de la Vega (@vegaro)

### 🔄 Other Changes
* Fix CoroutineCreationDuringComposition lint error on AGP 8.13.0 (#2659) via Cesar de la Vega (@vegaro)
* Support setting null offering id on PaywallView (#2658) via Toni Rico (@tonidero)
* Improve thread safety of setting paywalls preferred locale (#2655) via Josh Holtz (@joshdholtz)
* Remove validation for no packages on paywalls (#2653) via Josh Holtz (@joshdholtz)
* MON-1193 flatten Transition JSON structure after chatting more thoroughly with team (#2641) via Jacob Rakidzich (@JZDesign)
* Add test store maestro test (#2711) via Toni Rico (@tonidero)
* Finalize video component to include a checksum, and optimize memory usage for large file downloads (#2717) via Jacob Rakidzich (@JZDesign)
* Add `TestStoreSimulatedPurchaseError` error code (#2716) via Toni Rico (@tonidero)
* Bump fastlane-plugin-revenuecat_internal from `3f7fffc` to `25c7fb8` (#2721) via dependabot[bot] (@dependabot[bot])
* Disable offline entitlements in test store (#2718) via Toni Rico (@tonidero)
* Add E2E Test app for integration tests (#2715) via Toni Rico (@tonidero)
* [AUTOMATIC][Paywalls V2] Updates paywall-preview-resources submodule (#2714) via RevenueCat Git Bot (@RCGitBot)
* Bump fastlane-plugin-revenuecat_internal from `a8770fd` to `3f7fffc` (#2712) via dependabot[bot] (@dependabot[bot])
* Bump fastlane-plugin-revenuecat_internal from `e555afb` to `a8770fd` (#2708) via dependabot[bot] (@dependabot[bot])
* Correct Opt In for FileRepository (#2709) via Jacob Rakidzich (@JZDesign)
* Paywalls -> Video Component (#2680) via Jacob Rakidzich (@JZDesign)
* Update fastlane-plugin-revenuecat_internal to e555afb (#2705) via Cesar de la Vega (@vegaro)
* Revert kotlinCompilerExtensionVersion for MagicWeatherCompose and CustomEntitlementComputationSample (#2701) via Jaewoong Eum (@skydoves)
* [EXTERNAL] Fix incorrect exception use in test (#2674) via @nikit19 (#2703) via Toni Rico (@tonidero)
* Add CODEOWNERS (#2664) via Facundo Menzella (@facumenzella)
* Adds new tab ID properties to `TabsComponent`. (#2577) via JayShortway (@JayShortway)
* Bump fastlane-plugin-revenuecat_internal from `401d148` to `7508f17` (#2697) via dependabot[bot] (@dependabot[bot])
* Reimplement placeholder with Modifier.Node (#2677) via Jaewoong Eum (@skydoves)
* Remove unused kotlinCompilerExtensionVersion (#2691) via Jaewoong Eum (@skydoves)
* [AUTOMATIC][Paywalls V2] Updates paywall-preview-resources submodule (#2667) via RevenueCat Git Bot (@RCGitBot)
* Bump fastlane-plugin-revenuecat_internal from `a6dc551` to `401d148` (#2683) via dependabot[bot] (@dependabot[bot])
* Bump rexml from 3.4.1 to 3.4.2 (#2676) via dependabot[bot] (@dependabot[bot])
* Add 8.24.0 CHANGELOG to main (#2662) via Toni Rico (@tonidero)
* Bump fastlane-plugin-revenuecat_internal from `489faef` to `a6dc551` (#2673) via dependabot[bot] (@dependabot[bot])
* Bump fastlane-plugin-revenuecat_internal from `7d97553` to `489faef` (#2671) via dependabot[bot] (@dependabot[bot])
* File Repository (#2634) via Jacob Rakidzich (@JZDesign)
58 changes: 58 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,61 @@
## 8.25.0
## RevenueCat SDK
> [!NOTE]
> This release brings all non-breaking changes between SDK versions 9.6.0 and 9.11.0 to major 8, so developers that don't/can't use major 9, can still get the latest updates. meant to be bought only once, for example, lifetime subscriptions.

### ✨ New Features
* Adds new experimental `storefrontLocale` APIs. (#2726) via JayShortway (@JayShortway)
* Turn on Video Component (#2725) via Jacob Rakidzich (@JZDesign)
* Add support for the Test Store (#2710) via Toni Rico (@tonidero)
* Add Airbridge device ID subscriber attribute (#2696) via Lim Hoang (@limdauto)
* Enable Test Store (#2685) via Antonio Pallares (@ajpallares)
### 🐞 Bugfixes
* Fix deadlock in `allowSharingPlayStoreAccount` (#2707) via Cesar de la Vega (@vegaro)

## RevenueCatUI SDK
### Paywallv2
#### ✨ New Features
* Expose `launch` and `launchIfNeeded` to Java (#2695) via Cesar de la Vega (@vegaro)
#### 🐞 Bugfixes
* Fix bundled font families when using assets folder (#2672) via Toni Rico (@tonidero)
### Customer Center
#### ✨ New Features
* Add Customer Center per-view listener for hybrids (#2713) via Facundo Menzella (@facumenzella)
* Display Virtual Currencies in Customer Center (#2652) via Will Taylor (@fire-at-will)
#### 🐞 Bugfixes
* Fixes more Icons crashing with `NoClassDefFoundError` when using Material 1.4.0 (#2732) via Cesar de la Vega (@vegaro)
* Fix potential `NoClassDefFoundError` crash finding `Icons` caused by material3 1.4.0 (#2727) via Cesar de la Vega (@vegaro)
* Fix Expired badge in Customer Center dark mode (#2693) via Cesar de la Vega (@vegaro)
* Fix promo offer button CTA in Customer Center (#2682) via Cesar de la Vega (@vegaro)

### 🔄 Other Changes
* Add test store maestro test (#2711) via Toni Rico (@tonidero)
* Finalize video component to include a checksum, and optimize memory usage for large file downloads (#2717) via Jacob Rakidzich (@JZDesign)
* Add `TestStoreSimulatedPurchaseError` error code (#2716) via Toni Rico (@tonidero)
* Bump fastlane-plugin-revenuecat_internal from `3f7fffc` to `25c7fb8` (#2721) via dependabot[bot] (@dependabot[bot])
* Disable offline entitlements in test store (#2718) via Toni Rico (@tonidero)
* Add E2E Test app for integration tests (#2715) via Toni Rico (@tonidero)
* [AUTOMATIC][Paywalls V2] Updates paywall-preview-resources submodule (#2714) via RevenueCat Git Bot (@RCGitBot)
* Bump fastlane-plugin-revenuecat_internal from `a8770fd` to `3f7fffc` (#2712) via dependabot[bot] (@dependabot[bot])
* Bump fastlane-plugin-revenuecat_internal from `e555afb` to `a8770fd` (#2708) via dependabot[bot] (@dependabot[bot])
* Correct Opt In for FileRepository (#2709) via Jacob Rakidzich (@JZDesign)
* Paywalls -> Video Component (#2680) via Jacob Rakidzich (@JZDesign)
* Update fastlane-plugin-revenuecat_internal to e555afb (#2705) via Cesar de la Vega (@vegaro)
* Revert kotlinCompilerExtensionVersion for MagicWeatherCompose and CustomEntitlementComputationSample (#2701) via Jaewoong Eum (@skydoves)
* [EXTERNAL] Fix incorrect exception use in test (#2674) via @nikit19 (#2703) via Toni Rico (@tonidero)
* Add CODEOWNERS (#2664) via Facundo Menzella (@facumenzella)
* Adds new tab ID properties to `TabsComponent`. (#2577) via JayShortway (@JayShortway)
* Bump fastlane-plugin-revenuecat_internal from `401d148` to `7508f17` (#2697) via dependabot[bot] (@dependabot[bot])
* Reimplement placeholder with Modifier.Node (#2677) via Jaewoong Eum (@skydoves)
* Remove unused kotlinCompilerExtensionVersion (#2691) via Jaewoong Eum (@skydoves)
* [AUTOMATIC][Paywalls V2] Updates paywall-preview-resources submodule (#2667) via RevenueCat Git Bot (@RCGitBot)
* Bump fastlane-plugin-revenuecat_internal from `a6dc551` to `401d148` (#2683) via dependabot[bot] (@dependabot[bot])
* Bump rexml from 3.4.1 to 3.4.2 (#2676) via dependabot[bot] (@dependabot[bot])
* Add 8.24.0 CHANGELOG to main (#2662) via Toni Rico (@tonidero)
* Bump fastlane-plugin-revenuecat_internal from `489faef` to `a6dc551` (#2673) via dependabot[bot] (@dependabot[bot])
* Bump fastlane-plugin-revenuecat_internal from `7d97553` to `489faef` (#2671) via dependabot[bot] (@dependabot[bot])
* File Repository (#2634) via Jacob Rakidzich (@JZDesign)

## 8.24.0
## RevenueCat SDK
> [!NOTE]
Expand Down
12 changes: 6 additions & 6 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
GIT
remote: https://github.com/RevenueCat/fastlane-plugin-revenuecat_internal
revision: 7d97553e9c5baabcd18286f03d8034797a27dd64
revision: 25c7fb83d3e6f590a7130547f75135abda9f86a2
branch: main
specs:
fastlane-plugin-revenuecat_internal (0.1.0)
Expand Down Expand Up @@ -225,7 +225,7 @@ GEM
mime-types (3.7.0)
logger
mime-types-data (~> 3.2025, >= 3.2025.0507)
mime-types-data (3.2025.0715)
mime-types-data (3.2025.0924)
mini_magick (4.13.2)
mini_mime (1.1.5)
mini_portile2 (2.8.9)
Expand All @@ -238,12 +238,12 @@ GEM
naturally (2.3.0)
netrc (0.11.0)
nkf (0.2.0)
nokogiri (1.18.9)
nokogiri (1.18.10)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.18.9-arm64-darwin)
nokogiri (1.18.10-arm64-darwin)
racc (~> 1.4)
nokogiri (1.18.9-x86_64-darwin)
nokogiri (1.18.10-x86_64-darwin)
racc (~> 1.4)
octokit (10.0.0)
faraday (>= 1, < 3)
Expand All @@ -268,7 +268,7 @@ GEM
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
retriable (3.1.2)
rexml (3.4.1)
rexml (3.4.2)
rouge (3.28.0)
ruby2_keywords (0.0.5)
rubyzip (2.4.1)
Expand Down
4 changes: 0 additions & 4 deletions api-tester/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ android {
targetCompatibility = JavaVersion.VERSION_1_8
}

composeOptions {
kotlinCompilerExtensionVersion = "1.4.8"
}

buildFeatures {
compose = true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ static void check(final Purchases purchases, final Map<String, String> attribute
purchases.setCampaign("");
purchases.setCleverTapID("");
purchases.setKochavaDeviceID("");
purchases.setAirbridgeDeviceID("");
purchases.setTenjinAnalyticsInstallationID("");
purchases.setPostHogUserId("");
purchases.setAdGroup("");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.revenuecat.apitester.java.revenuecatui;

import android.content.Context;
import android.util.AttributeSet;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.compose.ui.platform.AbstractComposeView;

import com.revenuecat.purchases.customercenter.CustomerCenterListener;
import com.revenuecat.purchases.ui.revenuecatui.views.CustomerCenterView;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;

@SuppressWarnings({"unused"})
final class CustomerCenterViewAPI {

static void checkType(@NonNull Context context) {
AbstractComposeView view = new CustomerCenterView(context);
}

static void checkConstructors(
@NonNull Context context,
@Nullable AttributeSet attrs,
int defStyleAttr,
@NonNull Runnable dismissHandler,
@NonNull CustomerCenterListener listener
) {
Function0<Unit> dismissHandlerFunction = new Function0<Unit>() {
@Override
public Unit invoke() {
dismissHandler.run();
return Unit.INSTANCE;
}
};

new CustomerCenterView(context);
new CustomerCenterView(context, attrs);
new CustomerCenterView(context, attrs, defStyleAttr);
new CustomerCenterView(context, dismissHandlerFunction);
new CustomerCenterView(context, listener);
new CustomerCenterView(context, listener, dismissHandlerFunction);
}

static void checkMethods(
@NonNull CustomerCenterView view,
@NonNull Runnable dismissHandler,
@NonNull CustomerCenterListener listener
) {
Function0<Unit> dismissHandlerFunction = new Function0<Unit>() {
@Override
public Unit invoke() {
dismissHandler.run();
return Unit.INSTANCE;
}
};

view.setDismissHandler(null);
view.setDismissHandler(dismissHandlerFunction);
view.setCustomerCenterListener(null);
view.setCustomerCenterListener(listener);
}
}
Loading