The easiest way to get 5* reviews for your app? Just ask. (RatingManager Library)

  • by

I mentioned on a previous post that in my opinion an app’s (relative) success always comes down to the ratings. A good rating & more people will be inclined to give your app a try, a poor rating & it’s almost certainly doomed to the app landfill.. RIP.

In my experience the majority of users aren’t inclined to leave a rating unless the app either a — blows their mind & they have to tell everyone or b — it absolutely blows & they need warn everyone “IT SUCKS!!”. Personally speaking all of my apps end up somewhere in the middle, a place where a user doesn’t even think to leave a rating — they use the app, it does what it said on the tin, job done. The only users of mine who will definitely leave a rating are those for whom the app is buggy & therefore they think it sucks (fair play), or users who think the review section of the Play Store is actually the feature request section 🙈 (this happens wayyy to much).

So how do you get users to leave a positive rating for your apps when they’re really only inclined to rate your app when they have an issue? Simple — you ask.

Mind blowing I know but it really is that simple. Back in the day, where you’d get the email address of everyone who made a purchase of your app, I’d email every single person saying thank you & asking them if they like it to leave a review. Surprise surprise, they’d email me back that they’d never had a developer email them before, thank me, and then go on to leave a glowing review. Ahh the good old days. These days you obviously can’t do that, unless you’re doing something shady in your app to get that information.. in which case, please stop doing that.

No these days what you can do is ask for a rating in the app. I realise there’s a ton of rating manager libraries that let you do this, I’ve played with a lot of them, but my gripe with all of them (that I’ve tried — if I missed a killer one do let me know!) is twofold.

1 — They miss a crucial step.. Before I ask a user to leave a review I want to know if the user is going to leave a positive or a negative review. There’s no point prompting a user to leave a review only for them to go & give you a 1* “This app sucks” review. No what I want is to ask the user a — do they like the app, and if they say yes b — ask them if they can leave a rating. If they say no to liking the app then I want to be able to find out why so I can make the app a better experience for them & hopefully convert them to a positive review.

2 — They force me to handle the metrics I used to determine WHEN to show the prompt myself. Some libraries let you set how many days since install before it will prompt them to leave a rating, some have a few other similar metrics you can set but what I really want is to be able to set my own custom rules. For example, with my app ReadItToMe I only want to show a rating prompt to users who’ve had a certain amount of messages read to them. For Remindee maybe I only want to show the prompt to users who’ve set a reminder in the past month, otherwise when those users who haven’t used the app recently next open it, the first thing they’d see is a prompt asking for a rating. That just doesn’t feel like good UX to me.

So, in case the title of this post didn’t give it away, I built a library to handle all of that for me.. 🤓

My RatingManager Library

The first thing to note is this library provides 3 different prompts a user might see. The first one is the initialPopup which is where you ask “do you like this app” (obviously be a little more “human” with your copy 😂).

Then if the response to that is yes, the user will see a prompt asking if they’d like to leave a review to which they can respond “yes”, “not now”, “don’t ask me again”. (I should note all of the dialog text is fully customisable so the text displayed can be anything you like.) If the user responds “no” they don’t like the app there’s an optional dialog (you can toggle this feature) which offers them an option to email you to tell you why they don’t like the app. I’ve found this personally to be very useful in converting potentially negative reviews into positive ones by resolving whatever their issue was.

How do I implement it?

Firstly you need to create an instance of RatingManager. You do this by using the builder – RatingManager.Builder(context)

From that you can set your rules for when the prompt should show. The options provided are setMinDaysSinceInstall & setMinDaysSinceFeedback (the amount of days after they sent you a feedback email before the prompt displays again), setMinDaysSinceAskLater (the amount of days after they chose the “ask me later” option before the prompt displays again). That covers the basics. Then if you want to add your own metric for example maybe you don’t want the prompt to show until the user has played your game at least 50 times you can do add a custom rule such as:

new RatingManager.Builder(context)
.setMinDaysSinceInstall(MIN_DAYS_SINCE_INSTALL)
.setMinDaysSinceFeedback(MIN_DAYS_SINCE_FEEDBACK)
.setMinDaysSinceAskLater(MIN_DAYS_SINCE_ASK_LATER)
.showFeedbackOption(true, {feedback email address})
.addCustomRule(() -> DataManager.getGameCount() >= 50)

Furthermore you can completely customise the dialog displayed by using the RatingDialogOptions.Builder. An example being:

new RatingDialogOptions.Builder(context)
 .setDialogThemeResId(R.style.AppTheme_Dialog)
 .setInitialPopupMessage("Do you like this app?")
 .setInitialPopupPositiveBtnText("Yes")
 .setInitialPopupNegativeBtnText("No")
 .setInitialPopupLaterBtnText("Ask me later")
 .setRatingPopupTitle("Leave us a review!")
 .setRatingPopupMessage("You can help others discover this app by leaving us a 5* review")
 .setRatingPopupPositiveBtnText("Rate now")
 .setRatingPopupLaterBtnText("Maybe later")
 .setRatingPopupNeverBtnText("Don't ask me again")
 .setFeedbackPopupTitle("We're sorry to hear that")
 .setFeedbackPopupMessage("We'd love to know why so we can help improve the app for you & others")
 .setFeedbackPopupPositiveBtnText("Email us")
 .setFeedbackPopupLaterBtnText("Maybe later")
 .setFeedbackPopupNegativeBtnText("Not right now")

You can then apply this to the rating manager via setRatingDialogOptions.

Once you’ve built your rating manager you can simply call mRatingManager.showDialogIfRequired() from anywhere your app (I call it in the MainActivity’s onResume method) & if the rules are met it’ll show up, if not it won’t. It’s that simple.

You can find the library on GitHub here and you can add it to your project from Gradle via the JitPack repository (instructions on Jitpack if you don’t know how).

Feel free to use it, pick it apart, improve upon it.. And let me know what you think in the comments 🙂

A few things to note:

  • There’s a few other methods in the RatingManager such as shouldShowRatingDialog which can be used to check if the dialog should be shown, this is useful when you don’t want to show a dialog but want to do some other action but still want to use the logic within the library to determine when a rating prompt should be shown (ie maybe you want to show a notification instead).
  • There’s also a RatingManagerMockBuilder class which can be used for testing against the rules you’ve set etc.. An example would be:
new RatingManagerMockBuilder(context)
        .setDaysSinceInstall(7)
        .setDaysSinceAskLater(13)
        .setDaysSinceFeedback(45)
        .setFeedbackBuild(BuildConfig.VERSION_CODE - 1)
        .setNeverAsk(false)
        .setRated(false)
        .build();

You can mock when the prompt was last shown, if a rating was already left, which build the user last emailed you with feedback about etc..

Leave a Reply

Your email address will not be published. Required fields are marked *