"Оценить это приложение" - ссылка в приложении 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();
}