# Play In-App Review

# Play In-App Review

Native API for Play In-App Review.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ### Enumerations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ||
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------|
| [ReviewErrorCode](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaad0e9934718bd68e075dad08df35f84b)`{` ` `[REVIEW_NO_ERROR](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84ba74bcfc516c289a7cee263dc0309c0eab)` = 0,` ` `[REVIEW_INITIALIZATION_NEEDED](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84ba68b5cb1b6ef04da3bc0ba9f78f742b28)` = -1,` ` `[REVIEW_INITIALIZATION_FAILED](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84bad4dfc7a87e8cb5106087b2e2f52a2c62)` = -2,` ` `[REVIEW_REQUEST_FLOW_NEEDED](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84ba459719056706e960faec98277c105e3e)` = -3,` ` `[REVIEW_REQUEST_FLOW_FAILED](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84baedd81830426583b7b28bb5508c323a43)` = -4,` ` `[REVIEW_INVALID_REQUEST](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84ba6c22f1f4b2cc072134e21657418e4096)` = -5,` ` `[REVIEW_PLAY_STORE_NOT_FOUND](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaad0e9934718bd68e075dad08df35f84ba9e8bc4e0492745f26e121ab43ae3cf96)` = -6` `}` | enum Errors that can be encountered while using the in-app review API.    |
| [ReviewStatus](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf7b5bc6ea01e1a5d759a028bb571dad6)`{` ` `[REVIEW_STATUS_UNKNOWN](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaf7b5bc6ea01e1a5d759a028bb571dad6a3fd34e9a2eea6cf4d59c54baec351898)` = 0,` ` `[REVIEW_REQUEST_FLOW_PENDING](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaf7b5bc6ea01e1a5d759a028bb571dad6a46d13caa7c1ca2bd415327f5eb9830c0)` = 1,` ` `[REVIEW_REQUEST_FLOW_COMPLETED](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaf7b5bc6ea01e1a5d759a028bb571dad6a7d00d0f448102f438da9d647e694b3b4)` = 2,` ` `[REVIEW_LAUNCH_FLOW_PENDING](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaf7b5bc6ea01e1a5d759a028bb571dad6a3d3b35ab3546714395f8246db06e9a47)` = 3,` ` `[REVIEW_LAUNCH_FLOW_COMPLETED](https://developer.android.com/reference/native/play/core/group/review#group__review_1ggaf7b5bc6ea01e1a5d759a028bb571dad6a4f751d4b3ede367ecfa0fc678ce4dc0e)` = 4` `}`                                                                                                                                                                                                                                                                                                                                                                                                   | enum Status returned when requesting or launching the in-app review flow. |

|                                                                                                                                                                                                                                                                    ### Functions                                                                                                                                                                                                                                                                     ||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [ReviewManager_destroy](https://developer.android.com/reference/native/play/core/group/review#group__review_1ga3f111bf8f05a9c456559bf60a54f90e0)`()`                                                                                                                                                              | `void` Frees up memory allocated for the in-app review API.                                                                                                                                                                       |
| [ReviewManager_getReviewStatus](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaa8398798a80137b9dc55af1fcd4602f7)`(`[ReviewStatus](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf7b5bc6ea01e1a5d759a028bb571dad6)` *out_status)` | [ReviewErrorCode](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaad0e9934718bd68e075dad08df35f84b) Gets the state of an ongoing asynchronous operation: requesting or launching the flow. |
| [ReviewManager_init](https://developer.android.com/reference/native/play/core/group/review#group__review_1ga7c3e4a0fc4c615c4d4a4a2d45fb8acfb)`(JavaVM *jvm, jobject android_context)`                                                                                                                             | [ReviewErrorCode](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaad0e9934718bd68e075dad08df35f84b) Initialize the in-app review API, making the other functions available to call.        |
| [ReviewManager_launchReviewFlow](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db)`(jobject android_activity)`                                                                                                                             | [ReviewErrorCode](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaad0e9934718bd68e075dad08df35f84b) Asynchronously requests to display the in-app review flow to the user.                 |
| [ReviewManager_requestReviewFlow](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)`()`                                                                                                                                                    | [ReviewErrorCode](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaad0e9934718bd68e075dad08df35f84b) Asynchronously requests the information needed to launch the in-app review flow.       |

## Enumerations

### ReviewErrorCode

```text
 ReviewErrorCode
```  
Errors that can be encountered while using the in-app review API.

|                                                                                                                   Properties                                                                                                                   ||
|--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `REVIEW_INITIALIZATION_FAILED` | Error initializing dependencies.                                                                                                                                                                               |
| `REVIEW_INITIALIZATION_NEEDED` | The requested operation failed: need to call[ReviewManager_init()](https://developer.android.com/reference/native/play/core/group/review#group__review_1ga7c3e4a0fc4c615c4d4a4a2d45fb8acfb)first.              |
| `REVIEW_INVALID_REQUEST`       | An invalid parameter was passed to the function.                                                                                                                                                               |
| `REVIEW_NO_ERROR`              | No error has occurred.                                                                                                                                                                                         |
| `REVIEW_PLAY_STORE_NOT_FOUND`  | The Play Store app is either not installed or not the official version.                                                                                                                                        |
| `REVIEW_REQUEST_FLOW_FAILED`   | [ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)failed.                                            |
| `REVIEW_REQUEST_FLOW_NEEDED`   | The requested operation failed: need to call[ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)first. |

### ReviewStatus

```text
 ReviewStatus
```  
Status returned when requesting or launching the in-app review flow.

|                                                                                                                                                                          Properties                                                                                                                                                                          ||
|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `REVIEW_LAUNCH_FLOW_COMPLETED`  | [ReviewManager_launchReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db)asynchronous operation has finished, and it will receive this ReviewStatus regardless of whether the user completed the review or the user dismissed the dialog. |
| `REVIEW_LAUNCH_FLOW_PENDING`    | Waiting for[ReviewManager_launchReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db)asynchronous operation to finish.                                                                                                                     |
| `REVIEW_REQUEST_FLOW_COMPLETED` | [ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)asynchronous operation has finished.                                                                                                                            |
| `REVIEW_REQUEST_FLOW_PENDING`   | Waiting for[ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)asynchronous operation to finish.                                                                                                                    |
| `REVIEW_STATUS_UNKNOWN`         | Unknown Review status.                                                                                                                                                                                                                                                                                                      |

## Functions

### ReviewManager_destroy

```scdoc
void ReviewManager_destroy()
```  
Frees up memory allocated for the in-app review API.

Does nothing if[ReviewManager_init()](https://developer.android.com/reference/native/play/core/group/review#group__review_1ga7c3e4a0fc4c615c4d4a4a2d45fb8acfb)hasn't been called.  

### ReviewManager_getReviewStatus

```scdoc
ReviewErrorCode ReviewManager_getReviewStatus(
  ReviewStatus *out_status
)
```  
Gets the state of an ongoing asynchronous operation: requesting or launching the flow.

[ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)and[ReviewManager_launchReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db)execute an asynchronous operation, and this function helps to keep track of the current status of their asynchronous operation.

When using[ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c), the possible ReviewStatus values are:

- REVIEW_REQUEST_FLOW_PENDING
- REVIEW_REQUEST_FLOW_COMPLETED
- REVIEW_STATUS_UNKNOWN - in case of failure

<br />

When using[ReviewManager_launchReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db), the possible ReviewStatus values are:

- REVIEW_LAUNCH_FLOW_PENDING
- REVIEW_LAUNCH_FLOW_COMPLETED

<br />

<br />

|                                                                               Details                                                                                ||
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| Parameters  | |--------------|----------------------------------------------------------| | `out_status` | An out parameter for receiving the review status result. | |
| **Returns** | A ReviewErrorCode indicating an error associated with the most recent asynchronous operation request.                                                   |

### ReviewManager_init

```scdoc
ReviewErrorCode ReviewManager_init(
  JavaVM *jvm,
  jobject android_context
)
```  
Initialize the in-app review API, making the other functions available to call.

**See also:** [ReviewManager_destroy()](https://developer.android.com/reference/native/play/core/group/review#group__review_1ga3f111bf8f05a9c456559bf60a54f90e0)

|                                                                                                                                                        Details                                                                                                                                                         ||
|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Parameters  | |-------------------|-------------------------------------------------------------------------| | `jvm`             | The app's single JavaVM, for example from ANativeActivity's "vm" field. | | `android_context` | An Android Context, for example from ANativeActivity's "clazz" field.   |           |
| **Returns** | REVIEW_NO_ERROR if initialization succeeded, or an error if it failed. In case of failure the in-app review API is unavailable, and there will be an error in logcat. The most common reason for failure is that the PlayCore AAR is missing or some of its classes/methods weren't retained by ProGuard. |

### ReviewManager_launchReviewFlow

```scdoc
ReviewErrorCode ReviewManager_launchReviewFlow(
  jobject android_activity
)
```  
Asynchronously requests to display the in-app review flow to the user.

Use[ReviewManager_getReviewStatus()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaa8398798a80137b9dc55af1fcd4602f7)to monitor progress and get the result.

Note:[ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)and[ReviewManager_launchReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db)should not be called simultaneously from multiple threads.

Note: in some circumstances the review flow will not be shown to the user, for example if they have already seen it recently. Don't assume that calling this function will always display the review dialog.

<br />

|                                                                                                                                                                                                                      Details                                                                                                                                                                                                                       ||
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Parameters  | |--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `android_activity` | An Android Activity object parameter, it can be obtained from ANativeActivity's "clazz" field, and it will be used for launching the review dialog as part of the Android Activity stack. | |
| **Returns** | REVIEW_NO_ERROR if the request started successfully, or an error if it failed.                                                                                                                                                                                                                                                                                                                                                        |

### ReviewManager_requestReviewFlow

```scdoc
ReviewErrorCode ReviewManager_requestReviewFlow()
```  
Asynchronously requests the information needed to launch the in-app review flow.

Use[ReviewManager_getReviewStatus()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaa8398798a80137b9dc55af1fcd4602f7)to monitor progress and get the result.

Note:[ReviewManager_requestReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gadd995d77267ea3f5bf95c31a697ba82c)and[ReviewManager_launchReviewFlow()](https://developer.android.com/reference/native/play/core/group/review#group__review_1gaf0bef4e8e71bcfac38f4e7665735c0db)should not be called simultaneously from multiple threads.

<br />

|                                           Details                                           ||
|-------------|--------------------------------------------------------------------------------|
| **Returns** | REVIEW_NO_ERROR if the request started successfully, or an error if it failed. |