Lien «Rate This App» dans l’application Google Play Store sur le téléphone

Je voudrais mettre un lien “Rate This App” dans une application Android pour ouvrir la liste des applications dans l’application Google Play Store de l’utilisateur sur son téléphone.

  1. Quel code dois-je écrire pour créer le market:// ou http:// -link ouvert dans l’application Google Play Store sur le téléphone?
  2. Où mettez-vous le code?
  3. Quelqu’un at-il un exemple de mise en œuvre de cela?
  4. Devez-vous spécifier l’écran où le lien market:// ou http:// sera placé, et quel est le meilleur moyen d’utiliser – market:// ou http:// ?

J’ouvre le Play Store depuis mon application avec le code suivant:

  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()))); } 

Cela lancera le Play Store avec votre page App déjà ouverte. L’utilisateur peut le noter ici.

Voici un code de travail et à jour 🙂

 /* * 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(Ssortingng url) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Ssortingng.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; } 

Placez le code dans l’ Activity vous souhaitez l’appeler.
Lorsque l’utilisateur clique sur un bouton pour évaluer l’application, il suffit d’appeler la fonction rateApp() .

J’utilise toujours ce code:

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

Si vous publiez votre application à la fois sur Google Play Store et sur Amazon Appstore. Je gère également le cas où les utilisateurs (en particulier en Chine) n’ont pas à la fois l’app store et le navigateur.

 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(); } } } 

Vous pouvez toujours appeler getInstalledPackages () à partir de la classe PackageManager et vérifier que la classe de marché est installée. Vous pouvez également utiliser queryIntentActivities () pour vous assurer que l’intention que vous construisez pourra être traitée par quelque chose, même si ce n’est pas l’application du marché. C’est probablement la meilleure chose à faire, car elle est la plus flexible et la plus robuste.

Vous pouvez vérifier si l’application de marché est là par

 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 liste comporte au moins une entrée, le marché est là.

Vous pouvez utiliser ce qui suit pour lancer Android Market sur la page de votre application, c’est un peu plus automatisé:

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

Si vous voulez tester cela sur votre émulateur, vous n’avez probablement pas installé le marché: consultez ces liens pour plus de détails:

Comment faire pour activer l’Android Market dans l’émulateur Android de Google

Installation de Google Play sur un émulateur Android

J’utilise cette approche pour faire évaluer mes applications par les utilisateurs:

 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) { Ssortingng 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(); } 

Une autre approche qui peut fonctionner pour vous est Linkify. Si j’ai un TextView qui demande à l’utilisateur de noter l’application, je peux relier quelques mots dans le texte pour qu’ils soient mis en évidence et lorsque l’utilisateur les touche, le magasin de jeu s’ouvre, prêt à être examiné:

 class playTransformFilter implements TransformFilter { public Ssortingng transformUrl(Matcher match, Ssortingng 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.comstack("rate it"); Linkify.addLinks(text1, playMatcher, "", new playMatchFilter(), new playTransformFilter()); 

Vous pouvez l’utiliser, ça marche pour moi

 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 point concernant toutes les réponses ayant des implémentations basées sur la stratégie getPackageName () est que l’utilisation de BuildConfig.APPLICATION_ID peut être plus simple et fonctionne bien si vous utilisez la même base de code pour créer plusieurs applications avec différents identifiants d’application (par exemple, un produit en marque blanche).

Vous devriez ce code simple pour évaluer votre application dans votre activité.

 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()))); } 

Classement du magasin

  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()))); } } });