Android approach for "Rate my application"

AndroidRate

Android Problem Overview


Is there a best practice approach to prompt Android users to rate your application? Considering they could acquire it from Amazon.com or Google Marketplace what is the best route to handle this in a way that allows users to vote?

Android Solutions


Solution 1 - Android

For Google Marketplace, take a look at this neat code snippet. I'm sure you can modify it to launch the Amazon Appstore instead or in addition to.

EDIT: Looks like the site changed their URL structure so I've updated the link above so it works now. Here is an old copy at the Wayback Machine in case their site goes down again. I will paste the main contents of the post below as an additional backup but you still might want to visit the link to read the comments and get any updates.

This code prompts engaged users to rate your app in the Android market (inspired by iOS Appirater). It requires a certain number of launches of the app and days since the installation before the rating dialog appears.

Adjust APP_TITLE and APP_PNAME to your needs. You should also tweak DAYS_UNTIL_PROMPT and LAUNCHES_UNTIL_PROMPT.

To test it and to tweak the dialog appearance, you can call AppRater.showRateDialog(this, null) from your Activity. Normal use is to invoke AppRater.app_launched(this) each time your activity is invoked (eg. from within the onCreate method). If all conditions are met, the dialog appears.

public class AppRater {
private final static String APP_TITLE = "YOUR-APP-NAME";
private final static String APP_PNAME = "YOUR-PACKAGE-NAME";

private final static int DAYS_UNTIL_PROMPT = 3;
private final static int LAUNCHES_UNTIL_PROMPT = 7;

public static void app_launched(Context mContext) {
    SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
    if (prefs.getBoolean("dontshowagain", false)) { return ; }
    
    SharedPreferences.Editor editor = prefs.edit();
    
    // Increment launch counter
    long launch_count = prefs.getLong("launch_count", 0) + 1;
    editor.putLong("launch_count", launch_count);

    // Get date of first launch
    Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
    if (date_firstLaunch == 0) {
        date_firstLaunch = System.currentTimeMillis();
        editor.putLong("date_firstlaunch", date_firstLaunch);
    }
    
    // Wait at least n days before opening dialog
    if (launch_count >= LAUNCHES_UNTIL_PROMPT) {
        if (System.currentTimeMillis() >= date_firstLaunch + 
                (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
            showRateDialog(mContext, editor);
        }
    }
    
    editor.commit();
}   

public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {
    final Dialog dialog = new Dialog(mContext);
    dialog.setTitle("Rate " + APP_TITLE);

    LinearLayout ll = new LinearLayout(mContext);
    ll.setOrientation(LinearLayout.VERTICAL);
    
    TextView tv = new TextView(mContext);
    tv.setText("If you enjoy using " + APP_TITLE + ", please take a moment to rate it. Thanks for your support!");
    tv.setWidth(240);
    tv.setPadding(4, 0, 4, 10);
    ll.addView(tv);
    
    Button b1 = new Button(mContext);
    b1.setText("Rate " + APP_TITLE);
    b1.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));
            dialog.dismiss();
        }
    });        
    ll.addView(b1);

    Button b2 = new Button(mContext);
    b2.setText("Remind me later");
    b2.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            dialog.dismiss();
        }
    });
    ll.addView(b2);

    Button b3 = new Button(mContext);
    b3.setText("No, thanks");
    b3.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (editor != null) {
                editor.putBoolean("dontshowagain", true);
                editor.commit();
            }
            dialog.dismiss();
        }
    });
    ll.addView(b3);

    dialog.setContentView(ll);        
    dialog.show();        
    }
}

Solution 2 - Android

Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
try {
    context.startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
    UtilityClass.showAlertDialog(context, ERROR, "Couldn't launch the Google Playstore app", null, 0);
}

Solution 3 - Android

You could also use RateMeMaybe: https://github.com/Kopfgeldjaeger/RateMeMaybe

It gives you quite some options to configure (minimum of days/launches until first prompt, minimum of days/launches until each next prompt if user chooses "not now", dialog title, message etc.). It is also easy to use.

Example usage from README:

RateMeMaybe rmm = new RateMeMaybe(this);
rmm.setPromptMinimums(10, 14, 10, 30);
rmm.setDialogMessage("You really seem to like this app, "
                +"since you have already used it %totalLaunchCount% times! "
                +"It would be great if you took a moment to rate it.");
rmm.setDialogTitle("Rate this app");
rmm.setPositiveBtn("Yeeha!");
rmm.run();

Edit: If you want to only show the prompt manually, you can also just use the RateMeMaybeFragment

	if (mActivity.getSupportFragmentManager().findFragmentByTag(
			"rmmFragment") != null) {
		// the dialog is already shown to the user
		return;
	}
	RateMeMaybeFragment frag = new RateMeMaybeFragment();
	frag.setData(getIcon(), getDialogTitle(), getDialogMessage(),
			getPositiveBtn(), getNeutralBtn(), getNegativeBtn(), this);
	frag.show(mActivity.getSupportFragmentManager(), "rmmFragment");

getIcon() can be replaced with 0 if you don't want to use one; the rest of the getX calls can be replaced with Strings

Changing the code to open the Amazon Marketplace should be easy

Solution 4 - Android

Maybe set up a Facebook link to a fan page with "like" options and so forth? An icon with a small label on the main menu would nicely sufficient and not as annoying, if at all, as a pop up reminder.

Solution 5 - Android

Just write these two lines of code under your "Rank this Apps" button and it will take you to the Google store where you have uploaded your app.

String myUrl ="https://play.google.com/store/apps/details?id=smartsilencer";

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(myUrl)));

Solution 6 - Android

I think, redirecting users to your app's web page is the only solution here.

Solution 7 - Android

Play store policy says that if we notify users to perform some action in our app, then we must also let users cancel the operation if the user doesn’t want to perform that action. So if we ask users to update the app or rate the app on the Play store with Yes(Now), then we must also give an option for No(Later, Not Now), etc.

rateButton.setOnClickListener(new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
					r.showDefaultDialog();
				}
	});

where r is a class which contain showDefaultDialog method

public void showDefaultDialog() {

	//Log.d(TAG, "Create default dialog.");

	String title = "Enjoying Live Share Tips?";
	String loveit = "Love it";
	String likeit = "Like it";
	String hateit = "Hate it";

	new AlertDialog.Builder(hostActivity)
			.setTitle(title)
			.setIcon(R.drawable.ic_launcher)
			//.setMessage(message)
		    .setPositiveButton(hateit, this)
          .setNegativeButton(loveit, this)
 			.setNeutralButton(likeit, this)
			
			.setOnCancelListener(this)
			.setCancelable(true)
			.create().show();
}

To download a full example[androidAone]:http://androidaone.com/11-2014/notify-users-rate-app-playstore/

Solution 8 - Android

for simple solution try this library https://github.com/kobakei/Android-RateThisApp

you can also change its configuration like criteria to show dialog , title , message

Solution 9 - Android

In any event :eg button

              Intent intent = new Intent(Intent.ACTION_VIEW);
			  intent.setData
			  (Uri.parse("market://details?id="+context.getPackageName()));
			  startActivity(intent);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKeith AdlerView Question on Stackoverflow
Solution 1 - AndroidmarchicaView Answer on Stackoverflow
Solution 2 - AndroidMohd MufizView Answer on Stackoverflow
Solution 3 - AndroidnspoView Answer on Stackoverflow
Solution 4 - Androiduser777082View Answer on Stackoverflow
Solution 5 - AndroidPir Fahim ShahView Answer on Stackoverflow
Solution 6 - AndroidEgorView Answer on Stackoverflow
Solution 7 - AndroidvineetView Answer on Stackoverflow
Solution 8 - AndroidMina FawzyView Answer on Stackoverflow
Solution 9 - AndroidRishi GautamView Answer on Stackoverflow