Store review prompt
The native 'rate this app' dialog you request from the OS, which decides whether to show it and caps how often it appears.
See it
What it is
The system-drawn 'enjoying this app?' dialog with the star row, requested through Apple's requestReview API (SKStoreReviewController) or Google's In-App Review API. The key word is requested: you ask, the OS decides. It may show nothing, and it never tells you whether it appeared. Apple caps it at roughly three prompts per user per year, and Google enforces its own quota.
Timing is the whole game. Fire it after a success moment (a finished workout, a saved export, the third good session), never on first launch, never mid-task, and never stacked next to a permission dialog or paywall. Track your own counter so you spend the yearly budget on your happiest users, and gate on real engagement rather than days installed.
Gotchas: both platforms forbid incentivizing ratings, and Apple prohibits your own custom rating dialog in place of the native one, so the old 'did you like it? no? then email us instead' funnel is a policy risk. Testing is also deceptive, in two different ways. In a development build the prompt does appear, but it is a test dialog that submits nothing. In a TestFlight build the request does nothing at all: no dialog, no error, no signal, which is not a bug in your integration. And in production it often will not show either, because the quota is doing its job. Log the call site and move on rather than chasing a dialog you were never going to see.
Ask AI for it
Add a store review prompt using the native APIs (StoreKit requestReview on iOS, Play In-App Review on Android; expo-store-review if this is Expo). Trigger it only after a positive completion event, gated by persisted state: at least 3 sessions, at least one successful core action, at least 90 days since the last request, and never within 10 seconds of a permission dialog, paywall, or error. Do not build a custom star UI, do not offer any reward, and fail silently if the OS declines to show it.