presentCustomerCenter never resolves when it can't present

Open
#2,098 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@fire-at-will is already working on this.

Since Nov 2, 2026.

  • #2101 by @fire-at-will — open

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
ios, react-native, swift, typescript
Domain
mobile-dev

Research direction

Start with CustomerCenterProxy.present and PaywallProxy in the native iOS UI module, where the paywall walks up presentedViewController and the customer center does not. Compare the two, then check how the presentation promise is settled on failure. Done means the promise rejects when UIKit refuses the presentation, and presentCustomerCenter() opens from a formSheet like presentPaywall() does.

Written by the indexing model from the issue text.

Description

Hey! I hit the same thing as #1201 in my app. Using CustomerCenterView in a modal works, so I switched to that. Two things still seem worth fixing though.

When UIKit refuses the presentation, the promise from presentCustomerCenter() never settles. UIKit logs "Attempt to present CustomerCenterUIViewController on ScreenOrientationViewController which is already presenting RNSScreen" and that's it. My app awaited that promise to undo a portrait lock, so the lock stayed until a restart. Rejecting the promise when the presentation fails would make this easy to catch.

The paywall already handles this. PaywallProxy walks up presentedViewController before it presents, so presentPaywall() opens fine from a formSheet. CustomerCenterProxy.present uses the key window's root view controller as is. The same walk there would make both APIs behave the same.

Steps

  1. Open a screen as a formSheet (react-native-screens or expo-router)
  2. Call await RevenueCatUI.presentCustomerCenter() from it
  3. Nothing shows and the promise never resolves

Versions
react-native-purchases-ui 10.16.0, PurchasesHybridCommonUI 19.17.0, RevenueCatUI 5.99.0, Expo SDK 58, iOS 27 simulator

Dominant language
TypeScript
Stars
1.2k
Forks
124
Avg merge
1d 3h
Merged PRs (30d)
69

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from RevenueCat/react-native-purchases

All issues in RevenueCat/react-native-purchases

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.