Fighting Back Against The App Store's Negative Rating Bias

By
On July 14, 2009

Apple makes it easy to rate an apps during an uninstall by popping up an alert-box and asking for a star rating. This is, in fact, the easiest way to provide feedback. Absent an uninstall, a user must first launching the app store and then navigating to the app before providing a rating. Consequently, the App Store has a bias towards negative ratings.

Some apps — including the New York Times app — prompt frequent users to positively rate the app as a counter-measure to this negative rating bias. This article investigates how to pick the right users to prompt for a rating and includes simple sample code to ease collecting reviews.

Picking Positive People

People who use your application over an extended period of time are most likely to provide a positive rating. Some evidence to support this:

An analysis of 30-million app downloads determined that around 80-percent of free apps and 70-percent of paid apps are effectively abandoned by their second day on the device. After a month, more than 95% of the users who’ve installed an app no longer use it.

Long-term use implies positive feelings. People who don’t dig your app will abandon it. So, the question is, at what point should you prompt a user for a review?

To some extent, you’ll have to trade volume for quality. Ask too early and you risk negative reviews; wait long enough and the review will almost certainly be positive, but there won’t be many of them.

For a new app, I’d favor a larger number of ratings — particularly given the evidence that having 20 or more reviews seems to drive sales — and ask after 10 days. After the app is established, I’d start to favor higher ratings by waiting longer, seting the bar at around a month.

If your app is a game — or has some other obvious “woot!” moments — consider opportunistically prompting for a rating when they make some feel-good achievement like a high score.

Code

Prompting a user to provide a rating is straight forward: using the User Defaults system, we’ll record the date of the first launch. When the user crosses an installed-age threshold, we’ll ask for a rating using alert-view and — with their permission — take them right to the app’s page in the Store to enter a rating.

To prompt the user for a rating after the app’s been installed for 10 or more days add the following code the viewDidLoad method in its main view controller:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (! [defaults objectForKey:@"firstRun"]) {
	[defaults setObject:[NSDate date] forKey:@"firstRun"];
}

NSInteger daysSinceInstall = [[NSDate date] timeIntervalSinceDate:[defaults objectForKey:@"firstRun"]] / 86400;
if (daysSinceInstall > 10 && [defaults boolForKey:@"askedForRating"] == NO) {
	[[[UIAlertView alloc] initWithTitle:@"Like This App?" message:@"Please rate it in the App Store!" delegate:self cancelButtonTitle:@"No Thanks" otherButtonTitles:@"Rate It!", nil] show];
	[defaults setBool:YES forKey:@"askedForRating"];
}

[[NSUserDefaults standardUserDefaults] synchronize];

To launch the open the app’s page in the App Store when the user taps the “Rate It!” button subscribe to the UIAlertViewDelegate protocol and implement it’s callback method.

Add the protocol to the view controller’s header file, e.g.:

@interface RootViewController : UIViewController <UIAlertViewDelegate> {
	// ...
}

Add the callback method to the view controller’s implementation:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
	if (buttonIndex == 1) {
		NSURL *url = [NSURL URLWithString:@"YOUR URL TBD!!!"];
		[[UIApplication sharedApplication] openURL:url];
	}
}

This callback opens the app’s page in the App Store by launching its URL. To determine your’s app’s URL:

  1. Open iTunes on your Mac
  2. Select iTunes Store from the left-panel
  3. Enter your app’s name in the Search iTunes Store text field and hit enter
  4. Control-click on your app’s icon and select Copy iTunes Store URL

Opening an App Store URL doesn’t work in the simulator; so test this on a device.

The idea for this story came from Billy Gray. Have an idea for a story? Contact us!

0 responses to “Fighting Back Against The App Store's Negative Rating Bias”

  1. Benoit says:

    Thanks for the very useful post and a great blog.

    I would add one thing: record that you have asked the user to rate the app, regardless of the answer, to avoid bugging them every time after 10 days!

  2. Josh Rosen says:

    Thanks for the great tip. Also, I second Benoit’s point 🙂

  3. MattjDrake says:

    This is a fantastic tip – thanks! Everyone should do this…

  4. Mike Browne says:

    That is really good information with code included…thanks!

  5. pTracker says:

    Great post, Dan.

    Besides the “only ask once” check, there’s another consideration:

    You won’t know your app’s URL until it hits the app store, so this can only work for your first update and going forward. Alternatively, the code can get the URL from a web server, which can be updated once the app launches.

  6. Luke Lutman says:

    You can usually guess what your app’s pretty url will be. For example:

    https://itunes.com/app/MyAppName

    Then you can change it to the direct url in subsequent updates 🙂

  7. Dan Grigsby says:

    Beniot: good catch. Fixed. Made the mistake of trying to get this out late last night; should have looked at it with fresh eyes.

  8. Matt Rix says:

    You could also set up a redirect script on your own server that you set to point to your app page.

  9. James Lin says:

    Thanks! I’ll have to keep this in mind

  10. I like this idea. However, one suggestion I’d have is avoid asking the user to rate the app upon launch. If the user just launched the app, they did it because they want to use it.

    I think your suggestion of prompting after a certain activity is complete within the app is a better idea.

  11. Dan Grigsby says:

    Brian: also a good point. Should be easy to adapt this sample code to make that happen.

  12. CodeFlakes says:

    I just implemented this great solution in my new app and used
    https://www.itunes.com/apps/APPNAME link to predict the app link.
    All my other apps respond to this kind of link. Not sure how it behaves if there is spaces in the name however

  13. Billy Gray says:

    With regard to link predicting, we actually do a rewrite off our own site into the store. This gives us a peak at some of the traffic numbers, too. You could even throw some params on there to tell you that it comes from your rating prompt, and then strip it on the redirect.

  14. Great idea! One thing i noticed was in the code it says daysSinceInstall == 10, i believe that should be >=10 otherwise i think you would only ask them if they happen to run it on the 10th day 🙂

  15. Dan Grigsby says:

    John: you’re right. This post is a pebble in my shoe! I had that once, but made another change and… well, it’s fixed now.

  16. Noel says:

    This Apple technical note describes a better way to launch the App Store from your app, without flashing through Safari first (although you do lose the tracking ability): https://developer.apple.com/iphone/library/qa/qa2008/qa1629.html

  17. Marcantonio says:

    Very nice idea. The only thing is, we’re not sure that the app has been used during those first ten days. An usage counter might be an interesting addition.

  18. Wendy says:

    Thanks Dan for sharing the info and folks for insightful comments. I’m tracking certain activity and prompting the user for a rating once those events have occurred.

  19. Pratik says:

    UIAlertView is leaking!

    Change it to:
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Like This App?" message:@"Please rate it in the App Store!" delegate:self cancelButtonTitle:@"No Thanks" otherButtonTitles:@"Rate It!", nil];
    [alertView show];
    [alertView release];

  20. Ryan says:

    It’s sad to see how untrustworthy the App Store rating system has become. Just like most Internet rating systems, what originally was created to be a big help to consumers has, like many other aspects of the Net, become plagued with deception.

    Next time before downloading an app I encourage you to check out my website https://www.slapapp.com. We write trustworthy and unbiased reviews for iPhone apps. We’re more or less a litmus test for app developers. They submit their apps to us knowing they will risk a poor rating if their app is less than stellar. If someone hasn’t requested a review from us then it’s likely they may have a stinker.

    Happy app hunting!
    Ryan

    https://www.twitter.com/slapapp

  21. As Dustin mentioned, you can go right to the reviews page. You can avoid additional “flicker” of transitioning from the iTunes app to the App Store app by using this format of URL (note the importance of the &mt=8 at the end of the URL):

    https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id={your application ID number here}&pageNumber=0&sortOrdering=1&type=Purple+Software&mt=8

  22. Rob says:

    Just a quick thank you for this thought, the code and the revisions and ideas posted here in the comments. Valuable stuff! Keep it up!

  23. Vibhor Goyal says:

    Thats a great post, and it definitely was of a great help, and thanks to dustin and aaron, as well, for directing us directly to the review page.