Skip to content

Fixes CustomerCenter state not refreshing when reopening#2202

Merged
vegaro merged 6 commits into
mainfrom
cc-355-state-issue-in-android-customer-center-config-not-refreshed
Mar 4, 2025
Merged

Fixes CustomerCenter state not refreshing when reopening#2202
vegaro merged 6 commits into
mainfrom
cc-355-state-issue-in-android-customer-center-config-not-refreshed

Conversation

@vegaro

@vegaro vegaro commented Feb 28, 2025

Copy link
Copy Markdown
Member

We noticed that the customer center wasn't reloading when reopening it, only after switching to another tab in the Paywalls Tester.

I moved the loadCustomerCenter to LaunchedEffect next to when we track the impression to fix it

@emerge-tools

emerge-tools Bot commented Feb 28, 2025

Copy link
Copy Markdown

📸 Snapshot Test

12 modified, 233 unchanged

Name Added Removed Modified Renamed Unchanged Errored Approval
TestPurchasesUIAndroidCompatibility
com.revenuecat.testpurchasesuiandroidcompatibility
0 0 12 0 233 0 ✅ Approved

🛸 Powered by Emerge Tools

@vegaro vegaro requested a review from a team February 28, 2025 13:50
}

LaunchedEffect(Unit) {
viewModel.loadCustomerCenter()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that loadCustomerCenter does not cancel previous calls, or at least doesn't seem to.
Is it worth checking something like ... ?

    override suspend fun loadCustomerCenter() {
        if (_state.value is CustomerCenterState.Loading) {.  <--- early exit if its already loading
            return
        }
        if (_state.value !is CustomerCenterState.Loading) {
            _state.value = CustomerCenterState.Loading
        }
        try {
            val customerCenterConfigData = purchases.awaitCustomerCenterConfigData()
            val purchaseInformation = loadPurchaseInformation(dateFormatter, locale)
            _state.value = CustomerCenterState.Success(
                customerCenterConfigData,
                purchaseInformation,
                supportedPathsForManagementScreen = customerCenterConfigData.getManagementScreen()?.let {
                    supportedPaths(purchaseInformation, it)
                },
            )
        } catch (e: PurchasesException) {
            _state.value = CustomerCenterState.Error(e.error)
        }
    }

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmmm that's a good point. Actually we shouldn't be loading the initial state here. Let me rethink it

@facumenzella facumenzella Feb 28, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about a refreshIfNeeded kind of thing?

@facumenzella facumenzella left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one question

@codecov

codecov Bot commented Feb 28, 2025

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 80.54%. Comparing base (2c525b9) to head (6448edc).
Report is 5 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2202   +/-   ##
=======================================
  Coverage   80.54%   80.54%           
=======================================
  Files         277      277           
  Lines        9456     9456           
  Branches     1334     1334           
=======================================
  Hits         7616     7616           
  Misses       1280     1280           
  Partials      560      560           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@vegaro

vegaro commented Feb 28, 2025

Copy link
Copy Markdown
Member Author

I found the root cause. It was a regression from #2171

@vegaro vegaro requested a review from facumenzella February 28, 2025 16:12
@vegaro

vegaro commented Feb 28, 2025

Copy link
Copy Markdown
Member Author

I would love to add a test for this, but will do in a separate PR, it might be tricky

@vegaro

vegaro commented Mar 3, 2025

Copy link
Copy Markdown
Member Author

Added a test

@vegaro vegaro enabled auto-merge (squash) March 4, 2025 15:58
@vegaro vegaro merged commit 468eaec into main Mar 4, 2025
@vegaro vegaro deleted the cc-355-state-issue-in-android-customer-center-config-not-refreshed branch March 4, 2025 16:28
tonidero added a commit that referenced this pull request Mar 6, 2025
**This is an automatic release.**

## RevenueCat SDK
### ✨ New Features
* Add `hasPaywall` property to `Offering` (#2212) via Antonio Pallares
(@ajpallares)
### 🐞 Bugfixes
* Fix empty options in NoActive subscriptions screen (#2168) via Cesar
de la Vega (@vegaro)

## RevenueCatUI SDK
### Customer Center
#### ✨ New Features
* Create `CustomerCenterListener` (#2199) via Cesar de la Vega (@vegaro)
#### 🐞 Bugfixes
* Reload Customer Center after a successful restore (#2203) via Cesar de
la Vega (@vegaro)
* Fixes CustomerCenter state not refreshing when reopening (#2202) via
Cesar de la Vega (@vegaro)

### 🔄 Other Changes
* Improves PaywallsTester multi-API-key support (#2218) via JayShortway
(@JayShortway)
* [EXTERNAL] Bump Emerge Gradle Plugin and Snaphsots version (#2211) via
@runningcode (#2217) via JayShortway (@JayShortway)
* [AUTOMATIC][Paywalls V2] Updates Compose previews of all templates
(#2207) via RevenueCat Git Bot (@RCGitBot)
* [Paywalls V2] Enables template previews again (#2215) via JayShortway
(@JayShortway)
* Adds support for switching between 2 API keys to PaywallsTester
(#2213) via JayShortway (@JayShortway)
* Adds a `LocalPreviewImageLoader` `CompositionLocal`. (#2201) via
JayShortway (@JayShortway)
* Logs from RevenueCatUI are now tagged with `[Purchases]` too. (#2206)
via JayShortway (@JayShortway)
* [Paywalls V2] Ignores template previews for now. (#2209) via
JayShortway (@JayShortway)
* [Paywalls V2] Some more template previews optimizations (#2208) via
JayShortway (@JayShortway)
* chore: Delete key from customer center survey event (#2204) via
Facundo Menzella (@facumenzella)
* [Paywalls V2] Extract ImageLoader to use a single one (#2146) via Toni
Rico (@tonidero)
* [Paywalls V2] Adds progress indicator to buttons (#2198) via
JayShortway (@JayShortway)
* Avoids triggering "unscheduled" workflows when triggering workflows
via the CircleCI API (#2200) via JayShortway (@JayShortway)
* [Paywalls V2] Adds a note on publishing to the missing paywall error.
(#2193) via JayShortway (@JayShortway)
* Adds X-Kotlin-Version header. (#2197) via JayShortway (@JayShortway)
* [Paywalls V2] Adds docs on ignored arguments for Paywalls V2 in more
places. (#2195) via JayShortway (@JayShortway)
* chore: Add backend integration test for events (#2189) via Facundo
Menzella (@facumenzella)
* [Paywalls V2] Adds CI job to update template previews (#2192) via
JayShortway (@JayShortway)

---------

Co-authored-by: revenuecat-ops <ops@revenuecat.com>
Co-authored-by: Cesar de la Vega <cesarvegaro@gmail.com>
Co-authored-by: Toni Rico <antonio.rico.diez@revenuecat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants