Google Play In-App Review API to grow your app ratings

Tags: android, programming, productivity, career
Published: 2022-01-18 06:50:36

## Intro
Once we publish our app in Google PlayStore and it's live for users to download, app reviews and rating is very crucial for your apps to rank and stand out from the competition. We usually put some buttons of popups in apps to redirect users to PlayStore to get ratings and reviews. Now there is a great chance that users won't come back to the app. To overcome this problem google came up with a pretty good solution named `In-App Review`. This API helps us to show rating popup in our app itself so, the users don't have to leave your application.

## Must know before implementation

- `In-App Review API` supports minimum API level 21.
- The API itself decides how often the review popup will be shown. We should now call it very often because there is a limited  [quota](https://developer.android.com/guide/playcore/in-app-review#quotas)  it won't show after that.
- The review flow is also controlled by API itself. We should not try to alter that. Follow design  [guidelines](https://developer.android.com/guide/playcore/in-app-review#design-guidelines)  for API
- The review flow doesn’t indicate whether the user has reviewed our app or not, also it doesn’t tell us anything about what the review widget has shown to the user or not.

## Let's Integrate `In-App Review API`

### Add the following dependencies in your `App Level Gradle` file.


```
//  Play core library
implementation 'com.google.android.play:core:1.10.3'

``` 

#### Open Main Activity
Now we will create an instance of the `ReviewManager` interface, which will help us to start our review dialog. After creating an instance we will call the `requestReviewFlow()` method which will return an object of `ReviewInfo` class on successful completion. Now with the help of the `ReviewInfo` class, we gonna call `launchReviewFlow()` method. *Hurray we just created a complete flow of In-App Review API*

Now let's see how it looks like in real code.

**Code Snippet**

```
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.play.core.review.ReviewInfo;
import com.google.android.play.core.review.ReviewManager;
import com.google.android.play.core.review.ReviewManagerFactory;
import com.google.android.play.core.tasks.Task;

public class MainActivity extends AppCompatActivity {

	private ReviewManager reviewManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Initialize reviewManager 
		init();
	}
	
	// Initializing method for reviewManager
	private void init() {
		reviewManager = ReviewManagerFactory.create(this);
		// Initializing button and setting click listener using lambda method
		findViewById(R.id.rateApp).setOnClickListener(rate -> showRateApp());
	}

	
	// Shows the app rate dialog box using In-App review API
	// The app rating dialog flow might or might not be shown depending on the quota limitation
	public void showRateApp() {
		Task <ReviewInfo> request = reviewManager.requestReviewFlow();
		request.addOnCompleteListener(task -> {
			if (task.isSuccessful()) {
				// Create ReviewInfo object instance
				ReviewInfo reviewInfo = task.getResult();

                // Calling launch method with reviewManager and pass context and reviewInfo as required parameter
				Task <Void> flow = reviewManager.launchReviewFlow(this, reviewInfo);
				flow.addOnCompleteListener(task1 -> {
					// The flow has finished. The API does not indicate whether the user
					// reviewed or not, or even whether the review dialog was shown.
				});
			}
		});
	}
}

```