A Seamless Way to Gather App Review

Henry Priyono
Tokopedia Engineering
4 min readAug 10, 2020

Nowadays app review plays vital role in dictating the success of the company behind. Got overall rating below three then you are done. But how about not getting any rating at all? That’s also the sure way to destruction.

So what are we going to do here is to ask for review in the right moment as possible when the user seems satisfied with our apps experiences. The right moment comings in, our apps launch the popup screen that ask for review, then.. the user declined, and we lost the opportunity to get good rating.

But why the user declined? One of the reasonable factor is because he/she knows that he/she has to leave the apps to go to PlayStore just to give rating, then go back to apps, and this seems cumbersome and frustrating!

Fortunately, now we have In App Review that could be a great solution to provide seamless user experience whenever we want to ask for rating to our user base.

The Flow

In App Review which come from google play core library, has built-in functionality to launch bottom sheet that contains inquiry dialog to gather rating and review directly from users, without leaving the apps. This seamless experience of review gathering flow may provide lots of advantage to the apps implementing it, that users are more likely to give good rating because it shows on the right moment, and with minimal effort for users to actually provide honest rating and review.

Here is what the result looks like on PlayStore:

The Code

Basically, the implementation is pretty simple. First of all, make sure you have updated your gradle play-core dependencies to latest version:

implementation “com.google.android.play:core:${playCoreVersion}”// For Kotlin users only
implementation "com.google.android.play:core-ktx:${playCoreVersion}"

Then create ReviewManager instance using ReviewManagerFactory provided from PlayCore library.

val reviewManager = ReviewManagerFactory.create(activity)

Now you could use ReviewManager that has two main functionalities:

  1. requestReviewFlow: to request ReviewFlow that may resulting in success or failed if there is any problem
  2. launchReviewFlow: to launch the review dialog when the request for ReviewFlow return success

So we request for the flow using this code before actually launch it:

reviewManager.requestReviewFlow().addOnCompleteListener { request ->
if (request.isSuccessful()) {
//launch in-app review flow
} else {
//continue app with normal flow regardless of the result
}
}

then we launch the flow when the returned status is successful:

reviewManager.launchReviewFlow(activity, request.getResult()).addOnCompleteListener {
// The flow has finished,
// that could mean that it was launched or not,
// or that the user reviewed or not,
// the API does not forward that.
// Thus no matter the result we continue our app flow
}

For simplicity and reusability, we extract those code into a helper class that called ReviewHelper

object ReviewHelper {  @JvmOverloads
@JvmStatic
fun launchInAppReview(activity: Activity,
callback: Callback? = null) {
val reviewManager = ReviewManagerFactory.create(activity)
reviewManager.requestReviewFlow()
.addOnCompleteListener { request ->
if (request.isSuccessful()) {
reviewManager
.launchReviewFlow(activity, request.getResult())
.addOnCompleteListener {
callback?.onCompleted()
}
} else {
callback?.onCompleted()
}
}
}
interface Callback {
fun onCompleted()
}
}

so when we want to trigger in-app review from any Activity, we could simply just call:

ReviewHelper
.launchInAppReview(this, object: ReviewHelper.Callback {
override fun onCompleted() {
//review flow finished, resume app flow
}
})

Then voila! The in-app review dialog will be shown and interact with user by itself without any special handling from us (and should not, to ensure objectivity of the review).

The Guidelines

  • For best practice, we should trigger in-app review when users have experienced the app / game enough so they can provide useful feedback (i.e. when user has successfully completed transaction of mobile data recharge through our apps).
  • We should not overly trigger the prompt to minimize user frustration and limit the usage. For info, Play enforces a quota on how often a user can be shown the review dialog.
  • We should not have manual button to trigger in-app review manually, as the quota is stricted.
  • We should surface the card as-is, without tampering or modifying the existing design in any way — including size, opacity, shape, etc.

Conclusion

in-app review provides better flow and user experiences for apps to gather reviews and ratings from their user base. Still, there are some guidelines to be followed — some strict and some don’t — to avoid misuse and even worse UX of the apps as a result of not implementing it correctly. Like old saying “With greater power comes greater responsibility”, we should use this brand new feature wisely.

Welcome to the new era of apps review! :)

--

--