Skip to content

Releases: RevenueCat/purchases-android

7.2.3

14 Nov 18:46
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: fix template 5 header aspect ratio (#1465) via NachoSoto (@NachoSoto)
  • Paywalls: Fix template 1 header aspect ratio (#1466) via Toni Rico (@tonidero)
  • Paywalls: Support condensed footer in template 4 (#1469) via Toni Rico (@tonidero)
  • Paywalls: improve image loading (#1464) via NachoSoto (@NachoSoto)
  • Paywalls: override locale with paywall localization (#1418) via NachoSoto (@NachoSoto)

Other Changes

  • Paywalls: Fix purchasing regression by providing real activity (#1467) via Toni Rico (@tonidero)
  • Bump compile/target version to 34 (#1462) via Toni Rico (@tonidero)
  • Update circleci orb to latest version (#1456) via Toni Rico (@tonidero)
  • Snapshots: fix Fastlane job (#1461) via NachoSoto (@NachoSoto)
  • Update gradle plugin to version 8.1.1 (#1458) via Toni Rico (@tonidero)

7.2.2

10 Nov 10:45
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: improve error log when images fail to load (#1454) via NachoSoto (@NachoSoto)

Other Changes

  • Paywall events: Send paywall data with post receipt requests (#1452) via Toni Rico (@tonidero)
  • Paywalls: Track paywall events (#1447) via Toni Rico (@tonidero)
  • Paywall events: Handle errors parsing specific paywall event lines (#1451) via Toni Rico (@tonidero)
  • Paywalls: Move logic for events file helper to common generic class (4) (#1446) via Toni Rico (@tonidero)
  • Paywalls: Add paywall events flush logic and tests (3) (#1445) via Toni Rico (@tonidero)
  • Paywalls: Support sending paywall events to servers (2) (#1442) via Toni Rico (@tonidero)
  • CircleCI: fix record-revenuecatui-snapshots (#1455) via NachoSoto (@NachoSoto)
  • Lower request jitter log level from warning to debug (#1453) via Toni Rico (@tonidero)

7.2.1

08 Nov 19:13
Compare
Choose a tag to compare

RevenueCatUI

  • PaywallActivityLauncher: new constructor for a generic ActivityResultCaller (#1441) via NachoSoto (@NachoSoto)
  • Improve fullscreen templates in landscape orientation (#1435) via Toni Rico (@tonidero)
  • Paywalls: improve Japanese localization (#1439) via NachoSoto (@NachoSoto)

Other Changes

  • Remove side effect from setting purchasesUpdatedListener (#1443) via Cesar de la Vega (@vegaro)
  • Paywalls: Store paywall events on disk and API (1) (#1436) via Toni Rico (@tonidero)

7.2.0

06 Nov 17:22
Compare
Choose a tag to compare

New Features

  • StoreProduct: new pricePerWeek and pricePerYear (#1426) via NachoSoto (@NachoSoto)

RevenueCatUI

  • Fix RevenueCatUI API issues and add API tests (#1433) via Toni Rico (@tonidero)
  • Paywalls: Add initial snapshot testings for RevenueCatUI library (#1432) via Toni Rico (@tonidero)
  • Paywalls: new {{ sub_price_per_week }} variable (#1427) via NachoSoto (@NachoSoto)
  • Paywalls: new {{ sub_relative_discount }} variable (#1425) via NachoSoto (@NachoSoto)

Dependency Updates

  • Bump fastlane-plugin-revenuecat_internal from a297205 to 0ddee10 (#1431) via dependabot[bot] (@dependabot[bot])

Other Changes

  • Offering: restore constructor with no PaywallData (#1437) via NachoSoto (@NachoSoto)

7.1.1

02 Nov 13:19
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: Decrease max aspect ratio for tablets to have a max height (#1422) via Toni Rico (@tonidero)

Bugfixes

  • Improvements on BillingWrapper retrying mechanism (#1420) via Cesar de la Vega (@vegaro)

7.1.0

31 Oct 20:49
Compare
Choose a tag to compare

New Features

✨📱 Introducing Android Paywalls 🐾🧱

RevenueCat's Paywalls allow you to remotely configure your entire paywall view without any code changes or app updates.
Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls on Android, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers
  2. Add the RevenueCatUI dependency to your project:
implementation 'com.revenuecat.purchases:purchases:7.1.0'
implementation 'com.revenuecat.purchases:purchases-ui:7.1.0'
  1. Display a paywall:
@OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class)
@Composable
private fun LockedScreen() {
    YourContent()

    PaywallDialog(
        PaywallDialogOptions.Builder()
            .setRequiredEntitlementIdentifier(Constants.ENTITLEMENT_ID)
            .build()
    )
}

Note
Android paywalls is currently behind an experimental flag: ExperimentalPreviewRevenueCatUIPurchasesAPI.
It is safe to release app updates with it. We guarantee that paywalls will continue to work and any changes will always be backwards compatible.
They are stable, but migration steps may be required in the future. We'll do our best to minimize any changes you have to make.

You can find more information in our documentation.

List of changes
  • Paywalls: Improve PaywallDialog look on tablets (#1419) via Toni Rico (@tonidero)
  • Paywalls: disallow Markdown links in PurchaseButton (#1421) via NachoSoto (@NachoSoto)
  • Paywalls: implemented template 5 (#1412) via NachoSoto (@NachoSoto)
  • Paywalls: Fix wrong view model data after configuration changes (#1417) via Toni Rico (@tonidero)
  • Paywalls: update template 4 colors (#1410) via NachoSoto (@NachoSoto)
  • Paywalls: Add bundled font to paywall tester (#1415) via Toni Rico (@tonidero)
  • Paywalls: Fix purchase button text flashing when changing selected package (#1416) via Toni Rico (@tonidero)
  • Paywalls: support text3 and accent3 colors (#1409) via NachoSoto (@NachoSoto)
  • Paywalls: PaywallData errors shouldn't make Offerings fail to decode (#1402) via NachoSoto (@NachoSoto)
  • Paywalls: convert empty strings to null via NachoSoto (@NachoSoto)
  • Paywalls: footer view should not render background image via NachoSoto (@NachoSoto)
  • Paywalls: improve template 4 A11y support via NachoSoto (@NachoSoto)
  • Paywalls: Add close button option (#1390) via Toni Rico (@tonidero)
  • Paywalls: fix MarkdownText stealing touches from package buttons (#1411) via NachoSoto (@NachoSoto)
  • Fix onDismiss getting called twice in PaywallDialogs (#1408) via Cesar de la Vega (@vegaro)
  • Paywalls: ignore URL deserialization errors (#1399) via NachoSoto (@NachoSoto)
  • Animate transition between loading and loaded paywall (#1404) via Cesar de la Vega (@vegaro)
  • Fix button padding in Loading paywall (#1405) via Cesar de la Vega (@vegaro)
  • Add test for packageInfo.localizedDiscount (#1407) via Cesar de la Vega (@vegaro)
  • Paywalls: RemoteImage always renders a placeholder on previews via NachoSoto (@NachoSoto)
  • Paywalls: decode empty images as null via NachoSoto (@NachoSoto)
  • Paywalls: Allow trigger manual paywall tester release (#1406) via Toni Rico (@tonidero)
  • Fix navigation after closing paywall in Paywalls screen (#1403) via Cesar de la Vega (@vegaro)
  • Paywalls: Add experimental annotation to all public APIs in RevenueCat UI (#1400) via Toni Rico (@tonidero)
  • Paywalls: improve template 2 layout (#1396) via NachoSoto (@NachoSoto)
  • Paywalls: template 4 (#1349) via NachoSoto (@NachoSoto)
  • Paywalls: fix template 3 offer details color (#1394) via NachoSoto (@NachoSoto)
  • Paywalls: PaywallDialogOptions no longer requires dismissRequest (#1386) via NachoSoto (@NachoSoto)
  • Paywalls: fixed accessibility across templates (#1392) via NachoSoto (@NachoSoto)
  • Paywalls: increase PaywallBackground blur radius to match iOS via NachoSoto (@NachoSoto)
  • Paywalls: use LocalUriHandler for opening links (#1388) via NachoSoto (@NachoSoto)
  • Paywalls: support for Markdown links (#1387) via NachoSoto (@NachoSoto)
  • Paywalls: display purchase/restore errors (#1384) via NachoSoto (@NachoSoto)
  • Paywalls: improve error handling (#1383) via NachoSoto (@NachoSoto)
  • Paywalls: fixed incorrect background on footer (#1382) via NachoSoto (@NachoSoto)
  • Paywalls: fix backwards-compatible blurring of default paywall background (#1380) via NachoSoto (@NachoSoto)
  • Paywalls: polish template 2 spacing (#1381) via NachoSoto (@NachoSoto)
  • Paywalls: optimize backwards compatible blurring (#1379) via NachoSoto (@NachoSoto)
  • Paywalls: Predownload offering images if paywalls sdk exists (#1372) via Toni Rico (@tonidero)
  • Paywalls: PurchaseButton supports gradients (#1378) via NachoSoto (@NachoSoto)
  • Paywalls: optimize AdaptiveComposable (#1377) via NachoSoto (@NachoSoto)
  • Paywalls: improve FooterDialog corner radius (#1374) via NachoSoto (@NachoSoto)
  • Paywalls: optimize PurchaseButton (#1376) via NachoSoto (@NachoSoto)
  • Paywalls: Enable footer modes in paywall tester paywalls tab (#1368) via Toni Rico (@tonidero)
  • Paywalls: Support footer in template 3 (#1367) via Toni Rico (@tonidero)
  • Paywalls: calculate discountRelativeToMostExpensivePerMonth (#1370) via NachoSoto (@NachoSoto)
  • Paywalls: Add offer details in template 2 when in condensed form (#1371) via Toni Rico (@tonidero)
  • Paywalls: improve handling of lifetime/custom packages (#1363) via NachoSoto (@NachoSoto)
  • Paywalls: Support footer in template 1 (#1366) via Toni Rico (@tonidero)
  • Add StoreProduct.pricePerMonth (#1369) via NachoSoto (@NachoSoto)
  • Paywalls: Support condensed footer presentation in template 2 (#1365) via Toni Rico (@tonidero)
  • Paywalls: finished localization support (#1362) via NachoSoto (@NachoSoto)
  • Paywalls: backwards compatible blurring (#1327) via Andy Boedo (@AndyBoedo)
  • Paywalls: PaywallViewModel tests (#1357) via NachoSoto (@NachoSoto)
  • Paywalls: improve LoadingPaywall (#1364) via NachoSoto (@NachoSoto)
  • Paywalls: Fix paywall compose previews (#1360) via Toni Rico (@tonidero)
  • Paywalls: Fix proguard rules kotlinx serialization (#1356) via Toni Rico (@tonidero)
  • Paywalls: Add custom font example to paywalls screen (#1358) via Toni Rico (@tonidero)
  • Paywalls: Support Google fonts and font families with multiple fonts (#1338) via Toni Rico (@tonidero)
  • Paywalls: Support custom fonts through FontProvider (#1328) via Toni Rico (@tonidero)
  • Paywalls: fixed Footer padding (#1354) via NachoSoto (@NachoSoto)
  • Paywalls: Rename PaywallView to Paywall (#1351) via Toni Rico (@tonidero)
  • Paywalls: disable PurchaseButton during purchases (#1352) via NachoSoto (@NachoSoto)
  • Paywalls: enable library publishing (#1353) via NachoSoto (@NachoSoto)
  • Paywalls: handle "action in progress" state (#1346) via NachoSoto (@NachoSoto)
  • Paywalls: support {{ sub_duration_in_months }} (#1348) via NachoSoto (@NachoSoto)
  • Paywalls: disallow purchasing currently subscribed products (#1334) via NachoSoto (@NachoSoto)
  • Paywalls: new PaywallActivityLauncher.launchIfNeeded methods (#1335) via NachoSoto (@NachoSoto)
  • Paywalls: PaywallColor supports RGBA (#1332) via NachoSoto (@NachoSoto)
  • Paywalls: Make DialogScaffold private (#1329) via Toni Rico (@tonidero)
  • Add revenuecatui gradle.properties to specify name of dependency (#1324) via Toni Rico (@tonidero)
  • Paywalls: log error when failing to load images (#1321) via NachoSoto (@NachoSoto)
  • Log errors when displaying default paywall (#1318) via Cesar de la Vega (@vegaro)
  • Rename packages to packageIds in PaywallData (#1309) via Cesar de la Vega (@vegaro)
  • Add support for multiple intro offers in IntroEligibilityStateView (#1319) via Cesar de la Vega (@vegaro)
  • Fix material theme references to use Material3 versions (#1326) via Toni Rico (@tonidero)
  • Paywalls: Add support to launch paywall as activity (#1317) via Toni Rico (@tonidero)
  • Parse {{ sub_offer_price_2 }} and {{ sub_offer_duration_2 }} variables (#1313) via Cesar de la Vega (@vegaro)
  • Paywalls: changed PaywallsTester app icon (#1323) via NachoSoto (@NachoSoto)
  • Paywalls: fixed PaywallDialog.setRequiredEntitlementIdentifier (#1322) via NachoSoto (@NachoSoto)
  • Paywalls: Markdown support (#1312) via NachoSoto (@NachoSoto)
  • PaywallsTester: added template name to offerings list (#1316) via NachoSoto (@NachoSoto)
  • Paywalls: Update paywall tester to be able to display paywall footer (#1315) via Toni Rico (@tonidero)
  • Paywalls: Add PaywallFooter composable to present a minified paywall UI that allows for custom paywalls (#1314) via Toni Rico (@tonidero)
  • Paywalls: use IntroEligibilityStateView (#1311) via NachoSoto (@NachoSoto)
  • PaywallData validation tests (#1310) via Cesar de la Vega (@vegaro)
  • Paywalls: implemented LoadingPaywallView with placeholder (#1284) via NachoSoto (@NachoSoto)
  • Paywalls: created LoadingPaywallView (#1282) via NachoSoto (@NachoSoto)
  • Fix template test data (#1308) via Cesar de la Vega (@vegaro)

Other Changes

Add purchases.setOnesignalUserID (#1304) via Raquel Diez (@Raquel10-RevenueCat)

7.1.0-beta.2

19 Oct 21:16
Compare
Choose a tag to compare
7.1.0-beta.2 Pre-release
Pre-release

New Features

✨ Introducing Android Paywalls (beta) 🐾🧱

RevenueCat's Paywalls allow you to to remotely configure your entire paywall view without any code changes or app updates.
Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls on Android, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers
  2. Add the purchases-ui dependency to your project:
implementation 'com.revenuecat.purchases:purchases-ui:7.1.0-beta.2'
  1. Display the paywall in your app:
@Composable
private fun LockedScreen() {
    YourContent()

    PaywallDialog(
        PaywallDialogOptions.Builder()
            .setRequiredEntitlementIdentifier(Constants.ENTITLEMENT_ID)
            .build()
    )
}

Check out our documentation for more information.

List of changes
  • Add StoreProduct.pricePerMonth (#1369) via NachoSoto (@NachoSoto)
  • Paywalls: Support condensed footer presentation in template 2 (#1365) via Toni Rico (@tonidero)
  • Paywalls: Support Google fonts and font families with multiple fonts (#1338) via Toni Rico (@tonidero)
  • Paywalls: Support custom fonts through FontProvider (#1328) via Toni Rico (@tonidero)
  • Paywalls: Enable footer modes in paywall tester paywalls tab (#1368) via Toni Rico (@tonidero)
  • Paywalls: calculate discountRelativeToMostExpensivePerMonth (#1370) via NachoSoto (@NachoSoto)
  • Paywalls: improve handling of lifetime/custom packages (#1363) via NachoSoto (@NachoSoto)
  • Paywalls: finished localization support (#1362) via NachoSoto (@NachoSoto)
  • Paywalls: backwards compatible blurring (#1327) via Andy Boedo (@aboedo)
  • Paywalls: improve LoadingPaywall (#1364) via NachoSoto (@NachoSoto)
  • Paywalls: Fix paywall compose previews (#1360) via Toni Rico (@tonidero)
  • Paywalls: Add custom font example to paywalls screen (#1358) via Toni Rico (@tonidero)
  • Add sample templates to paywalls tester (#1330) via Cesar de la Vega (@vegaro)
  • Expose new TestStoreProduct (#1333) via NachoSoto (@NachoSoto)
  • Add support for multiple intro offers in IntroEligibilityStateView (#1319) via Cesar de la Vega (@vegaro)
  • Paywalls: Add support to launch paywall as activity (#1317) via Toni Rico (@tonidero)
  • Parse {{ sub_offer_price_2 }} and {{ sub_offer_duration_2 }} variables (#1313) via Cesar de la Vega (@vegaro)
  • Paywalls: Add PaywallFooter composable to present a minified paywall UI that allows for custom paywalls (#1314) via Toni Rico (@tonidero)
  • Paywalls: Add API to display paywall as a composable dialog (#1297) via Toni Rico (@tonidero)
  • Template 3 (#1294) via Cesar de la Vega (@vegaro)
  • PaywallData validation (#1273) via Cesar de la Vega (@vegaro)
  • Creates default PaywallData (#1261) via Cesar de la Vega (@vegaro)
  • Paywalls: Add support for total_price_and_per_month variable in paywalls (#1285) via Toni Rico (@tonidero)
  • Paywalls: Add support for sub_offer_duration variable in paywalls (#1283) via Toni Rico (@tonidero)
  • Paywalls: Add support for sub_offer_price variable processing in paywalls (#1279) via Toni Rico (@tonidero)
  • Created enum with variable names (#1270) via Cesar de la Vega (@vegaro)
  • Paywalls: Add support for SUB_DURATION variable in paywalls (#1276) via Toni Rico (@tonidero)
  • Paywalls: Implement price_per_period variable support (#1269) via Toni Rico (@tonidero)
  • Paywalls: Add support for sub_period variable (#1264) via Toni Rico (@tonidero)
  • Paywalls: Add product_name variable support (#1263) via Toni Rico (@tonidero)
  • Adds localizedConfiguration (#1238) via Cesar de la Vega (@vegaro)
  • Paywalls: Add variable processing to paywall strings (#1251) via Toni Rico (@tonidero)
  • Add formattedPricePerMonth helper to StoreProduct and PricingPhase (#1255) via Toni Rico (@tonidero)
  • Add valueInMonths helper to Period class (#1250) via Toni Rico (@tonidero)
  • Show dialog after completed or error purchasing (#1246) via Cesar de la Vega (@vegaro)
  • Hook up purchasing listeners (#1243) via Cesar de la Vega (@vegaro)
  • Add callToActionSecondaryBackground (#1236) via Cesar de la Vega (@vegaro)
  • Add configForLocale to PaywallData (#1227) via Cesar de la Vega (@vegaro)
  • Add revision and remove default_locale (#1226) via Cesar de la Vega (@vegaro)
  • Serializes PaywallData (#1222) via Cesar de la Vega (@vegaro)
  • Adds kotlinx serialization (#1221) via Cesar de la Vega (@vegaro)
  • Add PaywallData and its classes (#1219) via Cesar de la Vega (@vegaro)
  • Paywalls: fixed Footer padding (#1354) via NachoSoto (@NachoSoto)
  • Paywalls: Rename PaywallView to Paywall (#1351) via Toni Rico (@tonidero)
  • Paywalls: disable PurchaseButton during purchases (#1352) via NachoSoto (@NachoSoto)
  • Paywalls: enable library publishing (#1353) via NachoSoto (@NachoSoto)
  • Paywalls: handle "action in progress" state (#1346) via NachoSoto (@NachoSoto)
  • Paywalls: support {{ sub_duration_in_months }} (#1348) via NachoSoto (@NachoSoto)
  • Paywalls: new PaywallActivityLauncher.launchIfNeeded methods (#1335) via NachoSoto (@NachoSoto)
  • Paywalls: ViewThatFits equivalent to improve Footer (#1258) via NachoSoto (@NachoSoto)
  • Paywalls: polish template 1 (#1343) via NachoSoto (@NachoSoto)
  • Paywalls: polish template 3 (#1344) via NachoSoto (@NachoSoto)
  • Paywalls: improved default paywall (#1342) via NachoSoto (@NachoSoto)
  • Paywalls: display default template in paywalls tester (#1341) via NachoSoto (@NachoSoto)
  • Paywalls: animate package selection transitions (#1337) via NachoSoto (@NachoSoto)
  • Paywalls: polished Template2, PurchaseButton, and Footer (#1336) via NachoSoto (@NachoSoto)
  • Add revenuecatui gradle.properties to specify name of dependency (#1324) via Toni Rico (@tonidero)
  • Paywalls: log error when failing to load images (#1321) via NachoSoto (@NachoSoto)
  • Log errors when displaying default paywall (#1318) via Cesar de la Vega (@vegaro)
  • Rename packages to packageIds in PaywallData (#1309) via Cesar de la Vega (@vegaro)
  • Fix material theme references to use Material3 versions (#1326) via Toni Rico (@tonidero)
  • Paywalls: changed PaywallsTester app icon (#1323) via NachoSoto (@NachoSoto)
  • Paywalls: fixed PaywallDialog.setRequiredEntitlementIdentifier (#1322) via NachoSoto (@NachoSoto)
  • Paywalls: Markdown support (#1312) via NachoSoto (@NachoSoto)
  • PaywallsTester: added template name to offerings list (#1316) via NachoSoto (@NachoSoto)
  • Paywalls: Update paywall tester to be able to display paywall footer (#1315) via Toni Rico (@tonidero)
  • Paywalls: use IntroEligibilityStateView (#1311) via NachoSoto (@NachoSoto)
  • PaywallData validation tests (#1310) via Cesar de la Vega (@vegaro)
  • Paywalls: implemented LoadingPaywallView with placeholder (#1284) via NachoSoto (@NachoSoto)
  • Paywalls: created LoadingPaywallView (#1282) via NachoSoto (@NachoSoto)
  • Fix template test data (#1308) via Cesar de la Vega (@vegaro)
  • Paywalls: changed PurchaseButton to use IntroEligibilityStateView (#1305) via NachoSoto (@NachoSoto)
  • Refactor checking for available packages when creating package configuration (#1307) via Cesar de la Vega (@vegaro)
  • Extract templates from TestData (#1299) via Cesar de la Vega (@vegaro)
  • Paywalls: Add some tests to intro eligibility calculation (#1303) via Toni Rico (@tonidero)
  • Paywalls: Template2 improve select button (#1301) via Toni Rico (@tonidero)
  • Paywalls: Add multiple offers fields to the paywall response and processing (#1302) via Toni Rico (@tonidero)
  • Paywalls: Intro Eligibility dependent composable (#1286) via NachoSoto (@NachoSoto)
  • Paywalls: InternalPaywallView now takes a PaywallViewMode parameter (#1281) via NachoSoto (@NachoSoto)
  • Paywalls: new PaywallIcon (#1274) via NachoSoto (@NachoSoto)
  • Paywalls: Add tests for additional periods in variable processor (#1278) via Toni Rico (@tonidero)
  • Paywalls: Adds some initial spanish strings and some initial preview (#1266) via Toni Rico (@tonidero)
  • Paywalls: added transition when loading images (#1272) via NachoSoto (@NachoSoto)
  • Paywalls: initial template 1 implementation (#1259) via NachoSoto (@NachoSoto)
  • Created Footer (#1245) via NachoSoto (@NachoSoto)
  • Paywalls: Add more tests in VariableProcessorTest (#1262) via Toni Rico (@tonidero)
  • Paywalls: Add template configuration factory tests (#1249) via Toni Rico (@tonidero)
  • Paywalls: extracted ApplicationContext interface and MockViewModel (#1257) via NachoSoto (@NachoSoto)
  • PaywallTester: Improve AppInfo screen to allow LogIn/LogOut and display debug menu (#1253) via Toni Rico (@tonidero)
  • PaywallTester: Do not show error dialog if cancellation (#1252) via Toni Rico (@tonidero)
  • Paywalls: Map data inputs into consumable TemplateConfiguration class (#1242) via Toni Rico (@tonidero)
  • Paywalls: new TestData to store fake paywalls (#1239) via NachoSoto (@NachoSoto)
  • Paywalls: created PaywallBackground (#1240) via NachoSoto (@NachoSoto)
  • Paywalls: Organize files into packages (#1241) via Toni Rico (@tonidero)
  • Add PaywallDataTest (#1237) via Cesar de la Vega (@vegaro)
  • Paywalls: Use coil to load images (#1235) via Toni Rico (@tonidero)
  • Paywalls: Add logger class to unify logging behavior (#1233) via Toni Rico (@tonidero)
  • Paywalls: Add initial Template2 UI and using colors and texts in paywall (#1232) via Toni Rico (@tonidero)
  • Paywalls: Use coroutines to interact with SDK (#1224) via Toni Rico (@tonidero)
  • Paywalls: Add simple paywall and use in tester app (#1223) via Toni Rico (@tonidero)
  • PaywallTester: Visualize offerings in offerings tab and navigate to new screen (#1220) via Toni Rico (@tonidero)
  • Add RevenueCatUI module and initial API (#1213)...
Read more

7.1.0-beta.1

16 Oct 19:56
Compare
Choose a tag to compare
7.1.0-beta.1 Pre-release
Pre-release

New Features

✨ Introducing Android Paywalls (beta) 🐾🧱

RevenueCat's Paywalls allow you to to remotely configure your entire paywall view without any code changes or app updates.
Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls on Android, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers
  2. Add the purchases-ui dependency to your project:
implementation 'com.revenuecat.purchases:purchases-ui:7.1.0-beta.1'
  1. Display the paywall in your app:
@Composable
private fun LockedScreen() {
    YourContent()

    PaywallDialog(
        PaywallDialogOptions.Builder()
            .setRequiredEntitlementIdentifier(Constants.ENTITLEMENT_ID)
            .build()
    )
}

Check out our documentation for more information.

List of changes
  • Add sample templates to paywalls tester (#1330) via Cesar de la Vega (@vegaro)
  • Expose new TestStoreProduct (#1333) via NachoSoto (@NachoSoto)
  • Add support for multiple intro offers in IntroEligibilityStateView (#1319) via Cesar de la Vega (@vegaro)
  • Paywalls: Add support to launch paywall as activity (#1317) via Toni Rico (@tonidero)
  • Parse {{ sub_offer_price_2 }} and {{ sub_offer_duration_2 }} variables (#1313) via Cesar de la Vega (@vegaro)
  • Paywalls: Add PaywallFooter composable to present a minified paywall UI that allows for custom paywalls (#1314) via Toni Rico (@tonidero)
  • Paywalls: Add API to display paywall as a composable dialog (#1297) via Toni Rico (@tonidero)
  • Template 3 (#1294) via Cesar de la Vega (@vegaro)
  • PaywallData validation (#1273) via Cesar de la Vega (@vegaro)
  • Creates default PaywallData (#1261) via Cesar de la Vega (@vegaro)
  • Paywalls: Add support for total_price_and_per_month variable in paywalls (#1285) via Toni Rico (@tonidero)
  • Paywalls: Add support for sub_offer_duration variable in paywalls (#1283) via Toni Rico (@tonidero)
  • Paywalls: Add support for sub_offer_price variable processing in paywalls (#1279) via Toni Rico (@tonidero)
  • Created enum with variable names (#1270) via Cesar de la Vega (@vegaro)
  • Paywalls: Add support for SUB_DURATION variable in paywalls (#1276) via Toni Rico (@tonidero)
  • Paywalls: Implement price_per_period variable support (#1269) via Toni Rico (@tonidero)
  • Paywalls: Add support for sub_period variable (#1264) via Toni Rico (@tonidero)
  • Paywalls: Add product_name variable support (#1263) via Toni Rico (@tonidero)
  • Adds localizedConfiguration (#1238) via Cesar de la Vega (@vegaro)
  • Paywalls: Add variable processing to paywall strings (#1251) via Toni Rico (@tonidero)
  • Add formattedPricePerMonth helper to StoreProduct and PricingPhase (#1255) via Toni Rico (@tonidero)
  • Add valueInMonths helper to Period class (#1250) via Toni Rico (@tonidero)
  • Show dialog after completed or error purchasing (#1246) via Cesar de la Vega (@vegaro)
  • Hook up purchasing listeners (#1243) via Cesar de la Vega (@vegaro)
  • Add callToActionSecondaryBackground (#1236) via Cesar de la Vega (@vegaro)
  • Add configForLocale to PaywallData (#1227) via Cesar de la Vega (@vegaro)
  • Add revision and remove default_locale (#1226) via Cesar de la Vega (@vegaro)
  • Serializes PaywallData (#1222) via Cesar de la Vega (@vegaro)
  • Adds kotlinx serialization (#1221) via Cesar de la Vega (@vegaro)
  • Add PaywallData and its classes (#1219) via Cesar de la Vega (@vegaro)
  • Paywalls: fixed Footer padding (#1354) via NachoSoto (@NachoSoto)
  • Paywalls: Rename PaywallView to Paywall (#1351) via Toni Rico (@tonidero)
  • Paywalls: disable PurchaseButton during purchases (#1352) via NachoSoto (@NachoSoto)
  • Paywalls: enable library publishing (#1353) via NachoSoto (@NachoSoto)
  • Paywalls: handle "action in progress" state (#1346) via NachoSoto (@NachoSoto)
  • Paywalls: support {{ sub_duration_in_months }} (#1348) via NachoSoto (@NachoSoto)
  • Paywalls: new PaywallActivityLauncher.launchIfNeeded methods (#1335) via NachoSoto (@NachoSoto)
  • Paywalls: ViewThatFits equivalent to improve Footer (#1258) via NachoSoto (@NachoSoto)
  • Paywalls: polish template 1 (#1343) via NachoSoto (@NachoSoto)
  • Paywalls: polish template 3 (#1344) via NachoSoto (@NachoSoto)
  • Paywalls: improved default paywall (#1342) via NachoSoto (@NachoSoto)
  • Paywalls: display default template in paywalls tester (#1341) via NachoSoto (@NachoSoto)
  • Paywalls: animate package selection transitions (#1337) via NachoSoto (@NachoSoto)
  • Paywalls: polished Template2, PurchaseButton, and Footer (#1336) via NachoSoto (@NachoSoto)
  • Add revenuecatui gradle.properties to specify name of dependency (#1324) via Toni Rico (@tonidero)
  • Paywalls: log error when failing to load images (#1321) via NachoSoto (@NachoSoto)
  • Log errors when displaying default paywall (#1318) via Cesar de la Vega (@vegaro)
  • Rename packages to packageIds in PaywallData (#1309) via Cesar de la Vega (@vegaro)
  • Fix material theme references to use Material3 versions (#1326) via Toni Rico (@tonidero)
  • Paywalls: changed PaywallsTester app icon (#1323) via NachoSoto (@NachoSoto)
  • Paywalls: fixed PaywallDialog.setRequiredEntitlementIdentifier (#1322) via NachoSoto (@NachoSoto)
  • Paywalls: Markdown support (#1312) via NachoSoto (@NachoSoto)
  • PaywallsTester: added template name to offerings list (#1316) via NachoSoto (@NachoSoto)
  • Paywalls: Update paywall tester to be able to display paywall footer (#1315) via Toni Rico (@tonidero)
  • Paywalls: use IntroEligibilityStateView (#1311) via NachoSoto (@NachoSoto)
  • PaywallData validation tests (#1310) via Cesar de la Vega (@vegaro)
  • Paywalls: implemented LoadingPaywallView with placeholder (#1284) via NachoSoto (@NachoSoto)
  • Paywalls: created LoadingPaywallView (#1282) via NachoSoto (@NachoSoto)
  • Fix template test data (#1308) via Cesar de la Vega (@vegaro)
  • Paywalls: changed PurchaseButton to use IntroEligibilityStateView (#1305) via NachoSoto (@NachoSoto)
  • Refactor checking for available packages when creating package configuration (#1307) via Cesar de la Vega (@vegaro)
  • Extract templates from TestData (#1299) via Cesar de la Vega (@vegaro)
  • Paywalls: Add some tests to intro eligibility calculation (#1303) via Toni Rico (@tonidero)
  • Paywalls: Template2 improve select button (#1301) via Toni Rico (@tonidero)
  • Paywalls: Add multiple offers fields to the paywall response and processing (#1302) via Toni Rico (@tonidero)
  • Paywalls: Intro Eligibility dependent composable (#1286) via NachoSoto (@NachoSoto)
  • Paywalls: InternalPaywallView now takes a PaywallViewMode parameter (#1281) via NachoSoto (@NachoSoto)
  • Paywalls: new PaywallIcon (#1274) via NachoSoto (@NachoSoto)
  • Paywalls: Add tests for additional periods in variable processor (#1278) via Toni Rico (@tonidero)
  • Paywalls: Adds some initial spanish strings and some initial preview (#1266) via Toni Rico (@tonidero)
  • Paywalls: added transition when loading images (#1272) via NachoSoto (@NachoSoto)
  • Paywalls: initial template 1 implementation (#1259) via NachoSoto (@NachoSoto)
  • Created Footer (#1245) via NachoSoto (@NachoSoto)
  • Paywalls: Add more tests in VariableProcessorTest (#1262) via Toni Rico (@tonidero)
  • Paywalls: Add template configuration factory tests (#1249) via Toni Rico (@tonidero)
  • Paywalls: extracted ApplicationContext interface and MockViewModel (#1257) via NachoSoto (@NachoSoto)
  • PaywallTester: Improve AppInfo screen to allow LogIn/LogOut and display debug menu (#1253) via Toni Rico (@tonidero)
  • PaywallTester: Do not show error dialog if cancellation (#1252) via Toni Rico (@tonidero)
  • Paywalls: Map data inputs into consumable TemplateConfiguration class (#1242) via Toni Rico (@tonidero)
  • Paywalls: new TestData to store fake paywalls (#1239) via NachoSoto (@NachoSoto)
  • Paywalls: created PaywallBackground (#1240) via NachoSoto (@NachoSoto)
  • Paywalls: Organize files into packages (#1241) via Toni Rico (@tonidero)
  • Add PaywallDataTest (#1237) via Cesar de la Vega (@vegaro)
  • Paywalls: Use coil to load images (#1235) via Toni Rico (@tonidero)
  • Paywalls: Add logger class to unify logging behavior (#1233) via Toni Rico (@tonidero)
  • Paywalls: Add initial Template2 UI and using colors and texts in paywall (#1232) via Toni Rico (@tonidero)
  • Paywalls: Use coroutines to interact with SDK (#1224) via Toni Rico (@tonidero)
  • Paywalls: Add simple paywall and use in tester app (#1223) via Toni Rico (@tonidero)
  • PaywallTester: Visualize offerings in offerings tab and navigate to new screen (#1220) via Toni Rico (@tonidero)
  • Add RevenueCatUI module and initial API (#1213) via Toni Rico (@tonidero)
  • Paywalls: Add restore paywall callbacks (#1350) via Toni Rico (@tonidero)
  • Update to use name instead of id when creating sample offering (#1347) via Cesar de la Vega (@vegaro)
  • Fix loading another template in Paywalls screen (#1345) via Cesar de la Vega (@vegaro)
  • Paywalls: Make DialogScaffold private (#1329) via Toni Rico (@tonidero)
  • Better handling of packages not found for id error (#1295) via Cesar de la Vega (@vegaro)
  • Add preview for default data (#1292) via Cesar de la Vega (@vegaro)
  • Paywalls: Fix state update upon locale changes (#1287) via Toni Rico (@tonidero)
  • Paywalls: Fix locale selection logic for previews (#1267) via Toni Rico (@tonidero)
  • Fix OfferingsParser exceptions being swallowed (#1228) via Cesar de la Vega (@vegaro)
  • Fix tests that broke when adding PaywallData (#1229) via Cesar de la Vega (@vegaro)
  • Paywalls: disallow purchasing c...
Read more

7.0.1

11 Oct 18:26
Compare
Choose a tag to compare

Bugfixes

  • Optimize billing client connection retries (#1300) via Toni Rico (@tonidero)

7.0.0

28 Sep 11:35
Compare
Choose a tag to compare

RevenueCat Android SDK v7 is here!! 😻

This latest release updates the SDK to use BillingClient 6. This version of BillingClient brings little change compared
with BillingClient 5 which brought an entire new subscription model which resulted in large changes across the entire SDK.

The only modification at the API level involves replacing "ProrationMode" with "ReplacementMode". The specific replacement
modes remain unchanged.

If your app doesn't currently use DEFERRED replacement modes, then you should be safe to upgrade to this version without
changes in behavior.

If your app supports product changes using DEFERRED replacement mode,
then you can either stick with the previous major version until support for DEFERRED is re-introduced in this major version,
or you can remove DEFERRED replacement options from your app.

See the Android Native - 6.x to 7.x Migration for more details.

If you come from an older version of the RevenueCat SDK, see Android Native - 5.x to 6.x Migration
for a more thorough explanation of the new Google subscription model announced with BillingClient 5 and how to take advantage of it.

Bumped minimum Android SDK version

RevenueCat SDK v7 bumps minimum Android SDK version from Android 4.0 (API level 14) to Android 4.4 (API level 19).

Support for Google Play InApp Messages

We've added support for Google Play InApp Messages which will show users a snackbar message during grace period and account hold once per day and provide them an opportunity to fix their payment without leaving the app.

InApp Messages are shown by default. If you want to disable this behaviour during configuration of the RevenueCat SDK:

Purchases.configure(
    PurchasesConfiguration.Builder(applicationContext, apiKey)
        .showInAppMessagesAutomatically(false)
        .build()
)

Bugfixes

  • Add awaitRestore to customEntitlementComputation library (#1275) via Toni Rico (@tonidero)