Enlace de “Valorar esta aplicación” en la aplicación de la tienda de Google Play en el teléfono

Me gustaría poner un enlace “Rate This App” en una aplicación de Android para abrir la aplicación en la aplicación de la tienda Google Play del usuario en su teléfono.

  1. ¿Qué código debo escribir para crear el market:// o http:// -link abierto en la aplicación Google Play Store en el teléfono?
  2. ¿Dónde colocas el código?
  3. ¿Alguien tiene una implementación de ejemplo de esto?
  4. ¿Tiene que especificar la pantalla donde se colocará el enlace market:// o http:// y cuál es el mejor para usar – market:// o http:// ?

Abrí Play Store desde mi aplicación con el siguiente código:

  Uri uri = Uri.parse("market://details?id=" + context.getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); // To count with Play market backstack, After pressing back button, // to taken back to our application, we need to add following flags to intent. goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); try { startActivity(goToMarket); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName()))); } 

Esto abrirá Play Store con su página de la aplicación ya abierta. El usuario puede calificarlo allí.

Aquí hay un código de trabajo y actualizado 🙂

 /* * Start with rating the app * Determine if the Play Store is installed on the device * * */ public void rateApp() { try { Intent rateIntent = rateIntentForUrl("market://details"); startActivity(rateIntent); } catch (ActivityNotFoundException e) { Intent rateIntent = rateIntentForUrl("https://play.google.com/store/apps/details"); startActivity(rateIntent); } } private Intent rateIntentForUrl(String url) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(String.format("%s?id=%s", url, getPackageName()))); int flags = Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_MULTIPLE_TASK; if (Build.VERSION.SDK_INT >= 21) { flags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT; } else { //noinspection deprecation flags |= Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET; } intent.addFlags(flags); return intent; } 

Pon el código en la Activity deseas llamarlo.
Cuando el usuario hace clic en un botón para calificar la aplicación, simplemente llame a la función rateApp() .

Yo siempre uso este código:

 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=PackageName"))); 

Esto es si publica su aplicación tanto en Google Play Store como en Amazon Appstore. También manejo el caso de que los usuarios (especialmente en China) no tienen tanto la tienda de aplicaciones como el navegador.

 public void goToMyApp(boolean googlePlay) {//true if Google Play, false if Amazone Store try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((googlePlay ? "market://details?id=" : "amzn://apps/android?p=") +getPackageName()))); } catch (ActivityNotFoundException e1) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse((googlePlay ? "http://play.google.com/store/apps/details?id=" : "http://www.amazon.com/gp/mas/dl/android?p=") +getPackageName()))); } catch (ActivityNotFoundException e2) { Toast.makeText(this, "You don't have any app that can open this link", Toast.LENGTH_SHORT).show(); } } } 

Siempre puede llamar a getInstalledPackages () desde la clase PackageManager y verificar para asegurarse de que la clase de mercado esté instalada. También puede usar queryIntentActivities () para asegurarse de que la intención que construya pueda ser manejada por algo, incluso si no es la aplicación de mercado. Esto es probablemente lo mejor que se puede hacer porque es el más flexible y robusto.

Puede verificar si la aplicación del mercado está allí

 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://search?q=foo")); PackageManager pm = getPackageManager(); List list = pm.queryIntentActivities(intent, 0); 

Si la lista tiene al menos una entrada, el Mercado está allí.

Puede usar lo siguiente para abrir Android Market en la página de su aplicación, es un poco más automatizado:

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

Si desea probar esto en su emulador, probablemente no tenga instalado el mercado: consulte estos enlaces para obtener más información:

Cómo habilitar el Android Market en el emulador de Google Android

Instalación de Google Play en Android Emulator

Utilizo este enfoque para que el usuario califique mis aplicaciones:

 public static void showRateDialog(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle("Rate application") .setMessage("Please, rate the app at PlayMarket") .setPositiveButton("RATE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (context != null) { String link = "market://details?id="; try { // play market available context.getPackageManager() .getPackageInfo("com.android.vending", 0); // not available } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); // should use browser link = "https://play.google.com/store/apps/details?id="; } // starts external action context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link + context.getPackageName()))); } } }) .setNegativeButton("CANCEL", null); builder.show(); } 

Otro enfoque que puede funcionar para usted es Linkify. Si tengo un TextView que le pide al usuario que califique la aplicación, puedo vincular un par de palabras en el texto para que se destaquen y cuando el usuario las toque, la play store se abre, lista para su revisión:

 class playTransformFilter implements TransformFilter { public String transformUrl(Matcher match, String url) { return "market://details?id=com.qwertyasd.yourapp"; } } class playMatchFilter implements MatchFilter { public boolean acceptMatch(CharSequence s, int start, int end) { return true; } } text1 = (TextView) findViewById(R.id.text1); text1.setText("Please rate it."); final Pattern playMatcher = Pattern.compile("rate it"); Linkify.addLinks(text1, playMatcher, "", new playMatchFilter(), new playTransformFilter()); 

Puedes usar esto, me funciona

 public static void showRateDialogForRate(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle("Rate application") .setMessage("Please, rate the app at PlayMarket") .setPositiveButton("RATE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (context != null) { //////////////////////////////// Uri uri = Uri.parse("market://details?id=" + context.getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); // To count with Play market backstack, After pressing back button, // to taken back to our application, we need to add following flags to intent. goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); try { context.startActivity(goToMarket); } catch (ActivityNotFoundException e) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName()))); } } } }) .setNegativeButton("CANCEL", null); builder.show(); } 

Un punto con respecto a todas las respuestas que tienen implementaciones basadas en la estrategia getPackageName () es que el uso de BuildConfig.APPLICATION_ID puede ser más sencillo y funciona bien si usa la misma base de código para comstackr varias aplicaciones con diferentes identificadores de aplicaciones (por ejemplo, un producto de etiqueta blanca).

Debería usar este código simple para calificar su aplicación en su actividad.

 try { Uri uri = Uri.parse("market://details?id=" + getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); startActivity(goToMarket); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName()))); } 

Play Store Rating

  btn_rate_us.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri uri = Uri.parse("market://details?id=" + getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); // To count with Play market backstack, After pressing back button, // to taken back to our application, we need to add following flags to intent. goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); try { startActivity(goToMarket); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName()))); } } });