Guides
Plan-enterprise-icon
Expo Application Services
API Reference

StoreReview

expo-store-review provides access to the SKStoreReviewController API in iOS 10.3+ devices, and ReviewManager API in Android 5.0+ allowing you to ask the user to rate your app without ever having to leave the app itself.
Screenshots of the store review API in action on iOS

Platform Compatibility

Android DeviceAndroid EmulatoriOS DeviceiOS SimulatorWeb
Status-success-iconStatus-success-iconStatus-success-iconStatus-success-iconStatus-failed-icon

Installation

Info-icon
expo-linking is a peer dependency and must be installed alongside expo-store-review.
Terminal
→ npx expo install expo-store-review expo-linking

If you're installing this in a bare React Native app, you should also follow these additional installation instructions.

Usage

It is important that you follow the Human Interface Guidelines for iOS and Guidelines for Android when using this API.
Specifically:
  • Don't call StoreReview.requestReview() from a button - instead try calling it after the user has finished some signature interaction in the app.
  • Don't spam the user.
  • Don't request a review when the user is doing something time sensitive like navigating.
  • Don't ask the user any questions before or while presenting the rating button or card.

Write Reviews

iOS

You can redirect someone to the "Write a Review" screen for an app in the iOS App Store by using the query parameter action=write-review. For example:
const itunesItemId = 982107779;
// Open the iOS App Store in the browser -> redirects to App Store on iOS
Linking.openURL(`https://apps.apple.com/app/apple-store/id${itunesItemId}?action=write-review`);
// Open the iOS App Store directly
Linking.openURL(
  `itms-apps://itunes.apple.com/app/viewContentsUserReviews/id${itunesItemId}?action=write-review`
);

Android

There is no equivalent redirect on Android, you can still open the Play Store to the reviews sections using the query parameter showAllReviews=true like this:
const androidPackageName = 'host.exp.exponent';
// Open the Android Play Store in the browser -> redirects to Play Store on Android
Linking.openURL(
  `https://play.google.com/store/apps/details?id=${androidPackageName}&showAllReviews=true`
);
// Open the Android Play Store directly
Linking.openURL(`market://details?id=${androidPackageName}&showAllReviews=true`);

API

import * as StoreReview from 'expo-store-review';

Methods

StoreReview.hasAction()

Example

if (await StoreReview.hasAction()) {
  // you can call StoreReview.requestReview()
}
  • Undo-iconPromise<boolean>

This returns a promise that fulfills to true if StoreReview.requestReview() is capable directing the user to some kind of store review flow. If the app config (app.json) does not contain store URLs and native store review capabilities are not available then the promise will fulfill to false.

StoreReview.isAvailableAsync()

Determines if the platform has the capabilities to use StoreReview.requestReview().

This returns a promise fulfills with boolean, depending on the platform:

  • On iOS, it will resolve to true if the device is running iOS 10.3+.
  • On Android, it will resolve to true if the device is running Android 5.0+.
  • On Web, it will resolve to false.

StoreReview.requestReview()

In ideal circumstances this will open a native modal and allow the user to select a star rating that will then be applied to the App Store, without leaving the app. If the device is running a version of iOS lower than 10.3, or a version of Android lower than 5.0, this will attempt to get the store URL and link the user to it.

StoreReview.storeUrl()

This uses the Constants API to get the Constants.manifest.ios.appStoreUrl on iOS, or the Constants.manifest.android.playStoreUrl on Android.

On Web this will return null.

  • Undo-iconstring | null

Error Codes

E_STORE_REVIEW_UNSUPPORTED

Requesting an App Store review is not supported on this device. The device must be iOS 10.3 or greater. Android and web are not supported. Be sure to check for support with isAvailableAsync() to avoid this error.

ERR_STORE_REVIEW_FAILED

This error occurs when the store review request was not successful.
  • Message-iconAsk a question on the forums about StoreReview
  • Github-iconView open bug reports for StoreReview
  • Code-iconView source code for StoreReview
  • Build-iconView package in npm Registry
  • Edit-iconEdit this page

Was this doc helpful?