A library that provides access to native APIs for in-app reviews.
expo-store-review
provides access to the SKStoreReviewController
API on iOS, 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.
Android Device | Android Emulator | iOS Device | iOS Simulator | Web |
---|---|---|---|---|
expo-linking
is a peer dependency and must be installed alongsideexpo-store-review
.
-
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.
It is important that you follow the Human Interface Guidelines for iOS and Guidelines for Android when using this API.
Specifically:
StoreReview.requestReview()
from a button - instead try calling it after the user has finished some signature interaction in the app.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`
);
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`);
import * as StoreReview from 'expo-store-review';
StoreReview.hasAction()
Example
if (await StoreReview.hasAction()) { // you can call StoreReview.requestReview() }
Returns
Promise<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()
.
Returns
Promise<boolean>
This returns a promise fulfills with boolean
, depending on the platform:
true
.true
if the device is running Android 5.0+.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 Android lower than 5.0, this will attempt to get the store URL and link the user to it.
Returns
Promise<void>
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
.
Returns
string | null
ERR_STORE_REVIEW_FAILED
This error occurs when the store review request was not successful.