Integrate in-app reviews (Unity)

This guide describes how to integrate in-app reviews in your app using Unity. There are separate integration guides for if you are using Kotlin or Java or native code.

Unity SDK overview

The Play In-App Review API is part of Play Core SDK family. The API for Unity offers a ReviewManager class to request and launch the flow using the RequestReviewFlow and LaunchReviewFlow methods. After a request is made, your app can check the status of the request using ReviewErrorCode.

Set up your development environment

OpenUPM-CLI

If you have the OpenUPM CLI installed you can install the OpenUPM registry with the following command:

openupm add com.google.play.review

OpenUPM

  1. Open the package manager settings by selecting the Unity menu option Edit > Project Settings > Package Manager.

  2. Add OpenUPM as a scoped registry to the Package Manager window:

    Name: package.openupm.com
    URL: https://package.openupm.com
    Scopes: com.google.external-dependency-manager
      com.google.play.common
      com.google.play.core
      com.google.play.review
    
  3. Open the package manager menu by selecting the Unity menu option Window > Package Manager.

  4. Set the manager scope drop-down to select My Registries.

  5. Select the Google Play Integrity plugin for Unity package from the package list and press Install.

Import from GitHub

  1. Download the latest .unitypackage release from GitHub.

  2. Import the .unitypackage file by selecting the Unity menu option Assets > Import package > Custom Package and importing all items.

Create the ReviewManager

Create an instance of ReviewManager that handles communication between your app and the API.

// Create instance of ReviewManager
private ReviewManager _reviewManager;
// ...
_reviewManager = new ReviewManager();

Request a ReviewInfo object

Follow the guidance about when to request in-app reviews to determine good points in your app's user flow to prompt the user for a review (for example, after a user dismisses the summary screen at the end of a level in a game). When your app gets close one of these points, use the ReviewManager instance to create an async operation, as shown in the following example:

var requestFlowOperation = _reviewManager.RequestReviewFlow();
yield return requestFlowOperation;
if (requestFlowOperation.Error != ReviewErrorCode.NoError)
{
    // Log error. For example, using requestFlowOperation.Error.ToString().
    yield break;
}
_playReviewInfo = requestFlowOperation.GetResult();

If the call is successful, the API returns the PlayReviewInfo object that your app needs to launch the in-app review flow. In the example, the call is made inside a coroutine to perform the async operation (this does not block the Main thread). Because the call is made asynchronously, it might take up to a couple of seconds, so your app should make the call before your app reaches the point in your user flow where you want to show the in-app review.

Launch the in-app review flow

After your app receives the PlayReviewInfo instance, it can launch the in-app review flow. Note that the PlayReviewInfo object is only valid for a limited amount of time, so your app should not wait too long before launching a flow.

var launchFlowOperation = _reviewManager.LaunchReviewFlow(_playReviewInfo);
yield return launchFlowOperation;
_playReviewInfo = null; // Reset the object
if (launchFlowOperation.Error != ReviewErrorCode.NoError)
{
    // Log error. For example, using requestFlowOperation.Error.ToString().
    yield break;
}
// The flow has finished. The API does not indicate whether the user
// reviewed or not, or even whether the review dialog was shown. Thus, no
// matter the result, we continue our app flow.

Next steps

Test your app's in-app review flow to verify that your integration is working correctly.