Skip to main content

Implementing App Rating and Review

1. Using Store Review

Property Description Values
requestReview() Initiates the store review flow void

Example: Requesting a Review

import { requestReview } from 'expo-store-review';

requestReview();
Note: The review prompt will only appear if the user has not already reviewed or declined to review the app.

2. Requesting Review

Method Description Notes
requestReview() Initiates the native review flow for the app Only works on iOS and Android devices with Google Play Services

Example: Requesting a Review

import { requestReview } from 'expo-in-app-review';

const hasFlowStarted = await requestReview();
console.log('Review flow started:', hasFlowStarted);
Note: The review flow will only appear if the user has previously interacted with the app and is eligible for a review request.

3. Checking Review Availability

Property Description Notes
Review.isAvailable Indicates if the review system is available on the current platform. Always returns true for iOS and Android; may return false on platforms that do not support reviews.

Example: Check Review Availability

import * as Review from 'expo-reviews';

const isReviewAvailable = await Review.isAvailableAsync();
console.log('Reviews available:', isReviewAvailable); // true or false
Note: On platforms like web or tvOS, review systems might not be supported, and isAvailableAsync will return false.

4. Checking Store Availability

Platform Store Availability Notes
iOS Available Reviews can be triggered via Linking.openURL to App Store
Android Available Reviews can be triggered via Linking.openURL to Google Play Store
Web Limited No direct review flow; requires manual redirection to store
Windows Limited No native review system; requires manual store URL
macOS Limited No built-in review system; requires manual store URL

Example: Check Store Availability

import { Platform } from 'react-native';
import { Linking } from 'expo';

const checkStoreAvailability = () => {
  if (Platform.OS === 'ios') {
    return Linking.canOpenURL('itms-apps://itunes.apple.com/app/id123456789');
  } else if (Platform.OS === 'android') {
    return Linking.canOpenURL('market://details?id=com.example.app');
  }
  return false;
};

export default checkStoreAvailability;

5. Opening Store Page

Property Description Example
openStorePage Opens the app's store page in the device's native app store openStorePage()

Example: Opening Store Page

import { openStorePage } from 'expo-store-review';

openStorePage();
Note: This function works on both iOS and Android devices, directing users to the appropriate app store.

6. Implementing Review Prompts

Property Description Values
promptTitle Title of the review prompt dialog "Rate our app"
promptMessage Message displayed in the review prompt "Would you like to rate our app?"
promptYes Text for the "Yes" button "Rate Now"
promptNo Text for the "No" button "Maybe Later"
promptCancel Text for the "Cancel" button "Cancel"

Example: Configuring Review Prompts

import { ReviewPrompt } from 'expo-rating';\n\nconst reviewConfig = {\n  promptTitle: 'Rate our app',\n  promptMessage: 'Would you like to rate our app?',\n  promptYes: 'Rate Now',\n  promptNo: 'Maybe Later',\n  promptCancel: 'Cancel'\n};\n\nReviewPrompt.configure(reviewConfig);
Note: Review prompts are only available on iOS and Android devices. Web and Expo Go do not support this feature.

7. Tracking Review Requests

Property Description Values Notes
requestReview() Triggers the native review request flow void Must be called after user interaction (e.g., after completing a task or achieving a milestone)
reviewStatus Tracks whether review was requested or declined 'requested' | 'declined' | 'notRequested' Used to prevent repeated prompts and respect user decisions

Example: Requesting a Review

import { requestReview } from 'expo-in-app-review';\n\nconst handleTaskCompletion = async () => {\n  // Simulate task completion\n  await requestReview();\n};
Note: On iOS, the review request will only appear if the user has previously interacted with your app and is eligible for a review.

8. Handling Review Limitations

Note: Review limitations vary by platform and are subject to change. Always check the latest guidelines from Apple and Google.
Platform Review Limitations Notes
iOS (Apple) 1 review per app per year Users can only submit one review per app annually. Additional reviews are ignored.
Android (Google) 1 review per app per user Each user can submit only one review per app. Subsequent reviews are not counted.
iOS (Apple) - App Store Connect Review request limit Apple may restrict review requests for apps with low ratings or poor performance.

Example: Handling Review Limitations in Expo

import { Platform } from 'expo-modules-core';
import * as StoreReview from 'expo-store-review';

const handleReviewRequest = async () => {
  if (Platform.OS === 'ios') {
    // iOS: Check if review is allowed
    const canRequest = await StoreReview.canRequestReview();
    if (canRequest) {
      // Request review
      await StoreReview.requestReview();
    } else {
      // Handle limitation (e.g., show message or delay)
      console.log('Review limit reached on iOS');
    }
  } else if (Platform.OS === 'android') {
    // Android: Use Expo's StoreReview module
    const canRequest = await StoreReview.canRequestReview();
    if (canRequest) {
      await StoreReview.requestReview();
    } else {
      console.log('Review limit reached on Android');
    }
  }
};

Key Limitations Summary

  • iOS: Users can submit only one review per app annually.
  • Android: Users can submit only one review per app per user.
  • Expo's StoreReview module provides a cross-platform way to request reviews, but limitations are enforced by the native platforms.

9. Using Smart Review Triggers

Example: Configuring Smart Review Triggers

import { useReview } from 'expo-review';

const App = () => {
  const { requestReview, isAvailable } = useReview();

  useEffect(() => {
    if (isAvailable) {
      requestReview();
    }
  }, [isAvailable]);

  return <View></View>;
};
Property Description Values
requestReview() Triggers the native review prompt void
isAvailable Indicates if review prompt can be shown boolean
Note: The review prompt will only appear if the user has not already reviewed or declined to review.

10. Redirecting to Store Listing

Property Description Example
expo-apple-app-review Redirects to Apple App Store review page for iOS apps import { openReview } from 'expo-apple-app-review';
expo-google-play-review Redirects to Google Play Store review page for Android apps import { openReview } from 'expo-google-play-review';

Example: Redirecting to Store Review Page

import { openReview } from 'expo-apple-app-review'; // For iOS
// Or import { openReview } from 'expo-google-play-review'; // For Android

const handleReviewRequest = () => {
  openReview();
};
Note: The review flow is only available on physical devices and will not work in Expo Go or simulator environments.

Was this article helpful?