gotchatypescriptreact-nativeTip
App Review Prompts: Using expo-store-review Correctly
Viewed 0 times
app reviewstore reviewSKStoreReviewControllerPlay In-App Reviewratings prompttiming
Problem
Showing app review prompts at the wrong time (too early, after a frustrating interaction) leads to negative reviews. iOS also rate-limits prompts to 3 times per 365 days.
Solution
Use
expo-store-review. Call StoreReview.isAvailableAsync() to check if the device supports it. Trigger the prompt only after a meaningful positive interaction: completing a task, reaching a milestone, or N sessions. Never show it after an error. Log whether the prompt was shown to avoid repeat requests.Why
iOS's
SKStoreReviewController is controlled by the OS — you cannot guarantee it will show. It shows at most 3 times per year per app. Android has similar Play In-App Review API limits. The OS decides whether to display the dialog, so your code just requests it.Gotchas
- In development/TestFlight, the prompt always shows if available (bypasses rate limit for testing)
- You cannot know if the user actually submitted a review — the API returns before they interact
- On Android, the In-App Review API requires a minimum time since install (typically 1 week)
- Never gate any feature behind leaving a review — this violates App Store guidelines
Code Snippets
Review prompt gated by session count and previous request
import * as StoreReview from 'expo-store-review';
import AsyncStorage from '@react-native-async-storage/async-storage';
async function maybeRequestReview(sessionCount: number) {
if (sessionCount < 5) return; // Wait for engagement
const alreadyRequested = await AsyncStorage.getItem('review_requested');
if (alreadyRequested) return;
const available = await StoreReview.isAvailableAsync();
if (available) {
await StoreReview.requestReview();
await AsyncStorage.setItem('review_requested', 'true');
}
}Revisions (0)
No revisions yet.