"Оценить это приложение" - ссылка в приложении Google Play Store на телефоне

Я хотел бы добавить ссылку "Оценить это приложение" в приложении Android, чтобы открыть список приложений в приложении Google Play Store на своем телефоне.

  • Какой код мне нужно написать для создания market:// или http:// -link в приложении Google Play Store на телефоне?
  • Где вы помещаете код?
  • У кого-нибудь есть пример реализации этого?
  • Вам нужно указать экран, на котором будет размещена ссылка market:// или http://, и которая лучше всего подходит - market:// или http://?

Ответ 1

Я открываю Play Store из своего приложения со следующим кодом:

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

Это запустит Play Store с уже открытой страницей вашего приложения. Пользователь может оценить его там.

Ответ 2

Вот действующий и обновляемый код:)

/*
* 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;
}

Поместите код в Activity, на который вы хотели бы позвонить.
Когда пользователь нажимает кнопку, чтобы оценить приложение, просто вызовите функцию rateApp().

Ответ 3

Это, если вы публикуете свое приложение как в Google Play Store, так и в App Store Amazon. Я также рассматриваю случай, что пользователи (особенно в Китае) не имеют магазина приложений и браузера.

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

Ответ 4

Я всегда использую этот код:

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

Ответ 5

Вы всегда можете вызвать getInstalledPackages() из PackageManager и проверьте, установлен ли класс рынка. Вы также можете использовать queryIntentActivities(), чтобы убедиться, что созданный вами Intent будет обработан чем-то, даже если это не приложение на рынке, Это, наверное, лучше всего делать, потому что это самый гибкий и надежный.

Вы можете проверить, есть ли там приложение на рынке

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

Если в списке есть хотя бы одна запись, там есть Market.

Вы можете использовать следующее для запуска Android Market на своей странице приложения, это немного более автоматизировано:

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

Если вы хотите протестировать это на своем эмуляторе, возможно, на нем не установлен рынок: см. эти ссылки для более подробной информации:

Как включить Android Market в Google Android Emulator

Установка Google Play на Android-эмулятор

Ответ 6

Я использую этот подход, чтобы сделать ставку для моих приложений:

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

Ответ 7

Другим подходом, который может работать для вас, является Linkify. Если у меня есть TextView, который просит пользователя оценить приложение, я могу связать пару слов в тексте, чтобы они были подсвечены, и когда пользователь их касается, магазин воспроизведения открывается, готовый к просмотру:

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

Ответ 8

Точка, относящаяся ко всем ответам, которые имеют реализации на основе стратегии getPackageName(), заключается в том, что использование BuildConfig.APPLICATION_ID может быть более прямым и хорошо работать, если вы используете одну и ту же базу кода для создания нескольких приложений с различными идентификаторами приложений (для например, продукт с белой этикеткой).

Ответ 9

Этот простой код для оценки вашего приложения в вашей деятельности.

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

Ответ 10

Вы можете использовать это, он работает для меня

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