Как открыть Google Play Store прямо из моего приложения для Android?


569

Я открыл магазин Google Play, используя следующий код

Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=my packagename "));
startActivity(i);.

Но он показывает мне полный вид действия как выбрать опцию (браузер / магазин воспроизведения). Мне нужно открыть приложение в Play Store напрямую.


Ответы:


1437

Вы можете сделать это, используя market://префикс .

final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
try {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}

Мы используем try/catchблок здесь, потому что Exceptionбудет брошено, если Play Store не установлен на целевом устройстве.

ПРИМЕЧАНИЕ : любое приложение может зарегистрироваться как способное обрабатывать market://details?id=<appId>Uri, если вы хотите специально настроить Google Play, проверьте ответ Berťák


53
если вы хотите перенаправить на все приложения разработчика, используйте market://search?q=pub:"+devNameиhttp://play.google.com/store/search?q=pub:"+devName
— Stefano Munarini

4
Это решение не работает, если какое-то приложение использует фильтр намерений с определенной схемой "market: //". Смотрите мой ответ, как открыть Google Play И ТОЛЬКО приложение Google Play (или веб-браузер, если GP отсутствует). :-)
— Berťák

18
Для проектов, использующих систему сборки Gradle, appPackageNameэто на самом деле BuildConfig.APPLICATION_ID. Нет Context/ Activityзависимостей, снижая риск утечек памяти.
— Кристиан Гарсия

3
Вам все еще нужен контекст для запуска намерения. Context.startActivity ()
— wblaschko

2
Это решение предполагает, что есть намерение открыть веб-браузер. Это не всегда так (как на Android TV), поэтому будьте осторожны. Вы можете использовать intent.resolveActivity (getPackageManager ()), чтобы определить, что делать.
— Coda

161

Многие ответы здесь предлагают использовать Uri.parse("market://details?id=" + appPackageName)) для открытия Google Play, но на самом деле этого недостаточно :

Некоторые сторонние приложения могут использовать свои собственные фильтры намерений с "market://"определенной схемой , поэтому они могут обрабатывать предоставленный Uri вместо Google Play (я сталкивался с такой ситуацией в приложении egSnapPea). Вопрос «Как открыть Google Play Store?», Поэтому я предполагаю, что вы не хотите открывать какие-либо другие приложения. Также обратите внимание, что, например, рейтинг приложения относится только к приложению GP Store и т. Д.

Чтобы открыть Google Play И ТОЛЬКО Google Play, я использую этот метод:

public static void openAppRating(Context context) {
    // you can also use BuildConfig.APPLICATION_ID
    String appId = context.getPackageName();
    Intent rateIntent = new Intent(Intent.ACTION_VIEW,
        Uri.parse("market://details?id=" + appId));
    boolean marketFound = false;

    // find all applications able to handle our rateIntent
    final List<ResolveInfo> otherApps = context.getPackageManager()
        .queryIntentActivities(rateIntent, 0);
    for (ResolveInfo otherApp: otherApps) {
        // look for Google Play application
        if (otherApp.activityInfo.applicationInfo.packageName
                .equals("com.android.vending")) {

            ActivityInfo otherAppActivity = otherApp.activityInfo;
            ComponentName componentName = new ComponentName(
                    otherAppActivity.applicationInfo.packageName,
                    otherAppActivity.name
                    );
            // make sure it does NOT open in the stack of your activity
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // task reparenting if needed
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            // if the Google Play was already open in a search result
            //  this make sure it still go to the app page you requested
            rateIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            // this make sure only the Google Play app is allowed to
            // intercept the intent
            rateIntent.setComponent(componentName);
            context.startActivity(rateIntent);
            marketFound = true;
            break;

        }
    }

    // if GP not present on device, open web browser
    if (!marketFound) {
        Intent webIntent = new Intent(Intent.ACTION_VIEW,
            Uri.parse("https://play.google.com/store/apps/details?id="+appId));
        context.startActivity(webIntent);
    }
}

Дело в том, что когда наши приложения могут открыть больше приложений, кроме Google Play, диалоговое окно выбора приложений пропускается, и приложение GP запускается напрямую.

ОБНОВЛЕНИЕ: Иногда кажется, что он открывает только приложение GP, не открывая профиль приложения. Как Тревор Уайли предложил в своем комментарии,Intent.FLAG_ACTIVITY_CLEAR_TOP может решить проблему. (Я сам еще не проверял ...)

Посмотрите этот ответ для понимания того, что Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDделает.


4
Несмотря на то, что это хорошо, в текущей сборке Google Play это также кажется ненадежным, если вы заходите на страницу других приложений в Google Play, а затем запускаете этот код, он просто открывает Google Play, но не переходит в ваше приложение.
— Золтиш

2
@zoltish, я добавил Intent.FLAG_ACTIVITY_CLEAR_TOP к флагам, и это, кажется,
— решило

Я использовал Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, но не работает. нет нового экземпляра, открытого в магазине Play
— Praveen Kumar Verma

3
Что произойдет, если вы rateIntent.setPackage("com.android.vending")будете уверены, что приложение PlayStore выполнит эту задачу вместо всего этого кода?
— dum4ll3

3
@ dum4ll3 Думаю, вы можете, но этот код также неявно проверяет, установлено ли приложение Google Play. Если вы не проверите это, вам нужно поймать ActivityNotFound
— Даниэле Сегато

81

Перейдите по официальной ссылке Android Developer как учебное пособие, шаг за шагом посмотрите и получите код для вашего пакета приложений из магазина Play Store, если он существует, или приложений Play Store не существует, затем откройте приложение из веб-браузера.

Официальная ссылка для разработчиков Android

https://developer.android.com/distribute/tools/promote/linking.html

Ссылка на страницу приложения

С веб-сайта: https://play.google.com/store/apps/details?id=<package_name>

Из приложения для Android: market://details?id=<package_name>

Ссылка на список товаров

С веб-сайта: https://play.google.com/store/search?q=pub:<publisher_name>

Из приложения для Android: market://search?q=pub:<publisher_name>

Ссылка на результат поиска

С веб-сайта: https://play.google.com/store/search?q=<search_query>&c=apps

Из приложения для Android: market://search?q=<seach_query>&c=apps


Использование префикса market: // больше не рекомендуется (проверьте ссылку, которую вы разместили)
— Грег Эннис,

@GregEnnis, где вы видите этот market: // префикс больше не рекомендуется?
— локи

@loki Я думаю, дело в том, что он больше не указан в качестве предложения. Если вы ищете на этой странице слово, marketвы не найдете никакого решения. Я думаю, что новый способ состоит в том, чтобы запустить более общее намерение developer.android.com/distribute/marketing-tools/… . Более поздние версии приложения Play Store, вероятно, имеют фильтр намерений для этого URIhttps://play.google.com/store/apps/details?id=com.example.android
— tir38

25

попробуй это

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);

1
Чтобы узнать, как открыть Google Play независимо (не встроено в новый вид в том же приложении), пожалуйста, проверьте мой ответ.
— code4jhon

21

Все приведенные выше ответы открывают Google Play в новом представлении того же приложения, если вы действительно хотите открыть Google Play (или любое другое приложение) независимо:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.android.vending");

// package name and activity
ComponentName comp = new ComponentName("com.android.vending",
                                       "com.google.android.finsky.activities.LaunchUrlHandlerActivity"); 
launchIntent.setComponent(comp);

// sample to open facebook app
launchIntent.setData(Uri.parse("market://details?id=com.facebook.katana"));
startActivity(launchIntent);

Важной частью является то, что на самом деле открывает Google Play или любое другое приложение независимо.

Большая часть того, что я видел, использует подход других ответов, и это было не то, что мне нужно, надеюсь, это кому-нибудь поможет.

С уважением.


Что такое this.cordova? Где объявления переменных? Где callbackобъявлено и определено?
— Эрик

это часть плагина Cordova, я не думаю, что это на самом деле актуально ... вам просто нужен экземпляр PackageManager и начать работу регулярно, но это плагин cordova github.com/lampaa, который я переписал здесь github.com/code4jhon/org.apache.cordova.startapp
— code4jhon

4
Я просто хочу сказать, что этот код не является чем-то, что люди могут просто перенести в свое собственное приложение для использования. Обрезка жира и оставление только основного метода было бы полезно для будущих читателей.
— Эрик

Да, я понимаю ... сейчас я использую гибридные приложения. Не могу действительно протестировать полностью нативный код. Но я думаю, что идея есть. Если у меня будет шанс, я добавлю точные нативные строки.
— code4jhon

надеюсь, это сделает @eric
— code4jhon

14

Вы можете проверить, установлено ли приложение Google Play Store , и, если это так, вы можете использовать протокол "market: //" .

final String my_package_name = "........."  // <- HERE YOUR PACKAGE NAME!!
String url = "";

try {
    //Check whether Google Play store is installed or not:
    this.getPackageManager().getPackageInfo("com.android.vending", 0);

    url = "market://details?id=" + my_package_name;
} catch ( final Exception e ) {
    url = "https://play.google.com/store/apps/details?id=" + my_package_name;
}


//Open the app page in Google Play store:
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(intent);

1
Чтобы узнать, как открыть Google Play независимо (не встроено в новый вид в том же приложении), пожалуйста, проверьте мой ответ.
— code4jhon

12

В то время как ответ Эрика правильный, и код Берняка тоже работает. Я думаю, что это сочетает в себе более элегантно.

try {
    Intent appStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
    appStoreIntent.setPackage("com.android.vending");

    startActivity(appStoreIntent);
} catch (android.content.ActivityNotFoundException exception) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}

Используя setPackage, вы заставляете устройство использовать Play Store. Если не установлен Play Store, Exceptionон будет пойман.


Официальные документы используют https://play.google.com/store/apps/details?id=вместо market:Каким образом? developer.android.com/distribute/marketing-tools/… Все еще полный и краткий ответ.
— серв-вкл

Я не уверен, но я думаю, что это ярлык, который Android переводит как « play.google.com/store/apps ». Возможно, вы также можете использовать «market: //» в исключении.
— M3-


7

Ты можешь сделать:

final Uri marketUri = Uri.parse("market://details?id=" + packageName);
startActivity(new Intent(Intent.ACTION_VIEW, marketUri));

получить ссылку здесь :

Вы также можете попробовать подход, описанный в принятом ответе на этот вопрос: невозможно определить, установлен ли магазин Google Play на устройстве Android или нет.


Я уже пытался с этим кодом, это также показывает возможность выбора браузера / магазина воспроизведения, потому что на моем устройстве установлены оба приложения (Google Play Store / браузер).
— Раджеш Кумар

Чтобы узнать, как открыть Google Play независимо (не встроено в новый вид в том же приложении), пожалуйста, проверьте мой ответ.
— code4jhon

7

Очень поздно на вечеринке Официальные документы здесь. И код описан

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(
    "https://play.google.com/store/apps/details?id=com.example.android"));
intent.setPackage("com.android.vending");
startActivity(intent);

Когда вы настроите это намерение, перейдите "com.android.vending"к нему, Intent.setPackage()чтобы пользователи могли видеть детали вашего приложения в приложении Google Play Store, а не в окне выбора . для КОТЛИН

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = Uri.parse(
            "https://play.google.com/store/apps/details?id=com.example.android")
    setPackage("com.android.vending")
}
startActivity(intent)

Если вы опубликовали мгновенное приложение с помощью Google Play Instant, вы можете запустить его следующим образом:

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri.Builder uriBuilder = Uri.parse("https://play.google.com/store/apps/details")
    .buildUpon()
    .appendQueryParameter("id", "com.example.android")
    .appendQueryParameter("launch", "true");

// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using
// Activity.getIntent().getData().
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId");

intent.setData(uriBuilder.build());
intent.setPackage("com.android.vending");
startActivity(intent);

Для КОТЛИНА

val uriBuilder = Uri.parse("https://play.google.com/store/apps/details")
        .buildUpon()
        .appendQueryParameter("id", "com.example.android")
        .appendQueryParameter("launch", "true")

// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using Activity.intent.data.
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId")

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = uriBuilder.build()
    setPackage("com.android.vending")
}
startActivity(intent)

Я думаю, это неправильно, по крайней мере Uri.parse("https://play.google.com/store/apps/details?id=. На некоторых устройствах вместо Play Market открывается веб-браузер.
— CoolMind

Весь код взят из официальных документов. Ссылка также прилагается в коде ответа, который описан здесь для краткого ознакомления.
— Хуснайн Касим

@CoolMind причина этого, вероятно, в том, что эти устройства имеют старую версию приложения Play Store, в которой нет фильтра намерений, соответствующего этому URI.
— tir38

@ tir38, может и так. Может быть, они не имеют сервисов Google Play или не авторизованы в них, я не помню.
— CoolMind

6

Поскольку официальные документы используют https://вместо этого market://, это объединяет ответ Эрика и M3-n50 с повторным использованием кода (не повторяйте себя):

Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
try {
    startActivity(new Intent(intent)
                  .setPackage("com.android.vending"));
} catch (android.content.ActivityNotFoundException exception) {
    startActivity(intent);
}

Он пытается открыть приложение GPlay, если оно существует, и возвращается к значению по умолчанию.


5

Готовое решение:

public class GoogleServicesUtils {

    public static void openAppInGooglePlay(Context context) {
        final String appPackageName = context.getPackageName();
        try {
            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
        } catch (android.content.ActivityNotFoundException e) { // if there is no Google Play on device
            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
        }
    }

}

На основании ответа Эрика.


1
Работает ли это для вас? Он открывает главную страницу Google Play, а не страницу моего приложения.
— Фиолетовый Жираф

4

Котлин:

Расширение:

fun Activity.openAppInGooglePlay(){

val appId = BuildConfig.APPLICATION_ID
try {
    this.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId")))
} catch (anfe: ActivityNotFoundException) {
    this.startActivity(
        Intent(
            Intent.ACTION_VIEW,
            Uri.parse("https://play.google.com/store/apps/details?id=$appId")
        )
    )
}}

Метод:

    fun openAppInGooglePlay(activity:Activity){

        val appId = BuildConfig.APPLICATION_ID
        try {
            activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId")))
        } catch (anfe: ActivityNotFoundException) {
            activity.startActivity(
                Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("https://play.google.com/store/apps/details?id=$appId")
                )
            )
        }
    }

3

Если вы хотите открыть магазин Google Play из своего приложения, то используйте эту команду сразу: market://details?gotohome=com.yourAppNameоткроются страницы вашего приложения в магазине Google Play.

Показать все приложения определенного издателя

Поиск приложений, использующих запрос в заголовке или описании

Ссылка: https://tricklio.com/market-details-gotohome-1/


3

Котлин

fun openAppInPlayStore(appPackageName: String) {
    try {
        startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appPackageName")))
    } catch (exception: android.content.ActivityNotFoundException) {
        startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")))
    }
}

2
public void launchPlayStore(Context context, String packageName) {
    Intent intent = null;
    try {
            intent = new Intent(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("market://details?id=" + packageName));
            context.startActivity(intent);
        } catch (android.content.ActivityNotFoundException anfe) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
        }
    }

2

Моя функция энтузиазма kotlin для этой цели

fun Context.canPerformIntent(intent: Intent): Boolean {
        val mgr = this.packageManager
        val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
        return list.size > 0
    }

И в твоей деятельности

val uri = if (canPerformIntent(Intent(Intent.ACTION_VIEW, Uri.parse("market://")))) {
            Uri.parse("market://details?id=" + appPackageName)
        } else {
            Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)
        }
        startActivity(Intent(Intent.ACTION_VIEW, uri))

2

Вот заключительный код из приведенных выше ответов, который сначала пытается открыть приложение с помощью приложения Google Play Store и, в частности, Play Store, в случае сбоя он запускает представление действия с помощью веб-версии: Credits to @Eric, @Jonathan Caballero

public void goToPlayStore() {
        String playStoreMarketUrl = "market://details?id=";
        String playStoreWebUrl = "https://play.google.com/store/apps/details?id=";
        String packageName = getActivity().getPackageName();
        try {
            Intent intent =  getActivity()
                            .getPackageManager()
                            .getLaunchIntentForPackage("com.android.vending");
            if (intent != null) {
                ComponentName androidComponent = new ComponentName("com.android.vending",
                        "com.google.android.finsky.activities.LaunchUrlHandlerActivity");
                intent.setComponent(androidComponent);
                intent.setData(Uri.parse(playStoreMarketUrl + packageName));
            } else {
                intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreMarketUrl + packageName));
            }
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreWebUrl + packageName));
            startActivity(intent);
        }
    }

2

Эта ссылка автоматически откроет приложение в market: // если вы работаете на Android и в браузере, если вы на ПК.

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1

Что вы имеете в виду? Вы пробовали мое решение? Это сработало для меня.
— Николай Шиндаров

На самом деле в моей задаче есть веб-просмотр, а в веб-просмотре я должен загрузить любой URL. но в этом случае, если есть открытый любой URL-адрес PlayStore, он показывает кнопку открыть PlayStore. поэтому мне нужно открыть приложение по нажатию этой кнопки. это будет динамичным для любого приложения, так как я могу управлять?
— hpAndro

Просто попробуйте ссылкуhttps://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
— Николай Шиндаров

1

Я объединил ответ Берляка и Стефано Мунарини на создание гибридного решения, которое обрабатывает сценарии « Оцените это приложение» и « Показать больше приложений» .

        /**
         * This method checks if GooglePlay is installed or not on the device and accordingly handle
         * Intents to view for rate App or Publisher's Profile
         *
         * @param showPublisherProfile pass true if you want to open Publisher Page else pass false to open APp page
         * @param publisherID          pass Dev ID if you have passed PublisherProfile true
         */
        public void openPlayStore(boolean showPublisherProfile, String publisherID) {

            //Error Handling
            if (publisherID == null || !publisherID.isEmpty()) {
                publisherID = "";
                //Log and continue
                Log.w("openPlayStore Method", "publisherID is invalid");
            }

            Intent openPlayStoreIntent;
            boolean isGooglePlayInstalled = false;

            if (showPublisherProfile) {
                //Open Publishers Profile on PlayStore
                openPlayStoreIntent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("market://search?q=pub:" + publisherID));
            } else {
                //Open this App on PlayStore
                openPlayStoreIntent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("market://details?id=" + getPackageName()));
            }

            // find all applications who can handle openPlayStoreIntent
            final List<ResolveInfo> otherApps = getPackageManager()
                    .queryIntentActivities(openPlayStoreIntent, 0);
            for (ResolveInfo otherApp : otherApps) {

                // look for Google Play application
                if (otherApp.activityInfo.applicationInfo.packageName.equals("com.android.vending")) {

                    ActivityInfo otherAppActivity = otherApp.activityInfo;
                    ComponentName componentName = new ComponentName(
                            otherAppActivity.applicationInfo.packageName,
                            otherAppActivity.name
                    );
                    // make sure it does NOT open in the stack of your activity
                    openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    // task reparenting if needed
                    openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                    // if the Google Play was already open in a search result
                    //  this make sure it still go to the app page you requested
                    openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    // this make sure only the Google Play app is allowed to
                    // intercept the intent
                    openPlayStoreIntent.setComponent(componentName);
                    startActivity(openPlayStoreIntent);
                    isGooglePlayInstalled = true;
                    break;

                }
            }
            // if Google Play is not Installed on the device, open web browser
            if (!isGooglePlayInstalled) {

                Intent webIntent;
                if (showPublisherProfile) {
                    //Open Publishers Profile on web browser
                    webIntent = new Intent(Intent.ACTION_VIEW,
                            Uri.parse("http://play.google.com/store/search?q=pub:" + getPackageName()));
                } else {
                    //Open this App on web browser
                    webIntent = new Intent(Intent.ACTION_VIEW,
                            Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
                }
                startActivity(webIntent);
            }
        }

Применение

  • Открыть профиль издателя
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Открыть страницу приложения в PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}

Я бы предложил разделить этот код на более мелкие методы. Трудно найти важный код в этих спагетти :) Кроме того, вы проверяете "com.android.vending", что насчет com.google.market
— Aetherna

1

Народы, не забывайте, что вы могли бы получить что-то большее от этого. Я имею в виду отслеживание UTM например. https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

public static final String MODULE_ICON_PACK_FREE = "com.example.iconpack_free";
public static final String APP_STORE_URI =
        "market://details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";
public static final String APP_STORE_GENERIC_URI =
        "https://play.google.com/store/apps/details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";

try {
    startActivity(new Intent(
        Intent.ACTION_VIEW,
        Uri.parse(String.format(Locale.US,
            APP_STORE_URI,
            MODULE_ICON_PACK_FREE,
            getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
} catch (android.content.ActivityNotFoundException anfe) {
    startActivity(new Intent(
        Intent.ACTION_VIEW,
        Uri.parse(String.format(Locale.US,
            APP_STORE_GENERIC_URI,
            MODULE_ICON_PACK_FREE,
            getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}

1

Котлинская версия с резервным и текущим синтаксисом

 fun openAppInPlayStore() {
    val uri = Uri.parse("market://details?id=" + context.packageName)
    val goToMarketIntent = Intent(Intent.ACTION_VIEW, uri)

    var flags = Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
    flags = if (Build.VERSION.SDK_INT >= 21) {
        flags or Intent.FLAG_ACTIVITY_NEW_DOCUMENT
    } else {
        flags or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    goToMarketIntent.addFlags(flags)

    try {
        startActivity(context, goToMarketIntent, null)
    } catch (e: ActivityNotFoundException) {
        val intent = Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + context.packageName))

        startActivity(context, intent, null)
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.