Як відкрити магазин Google Play безпосередньо з програми 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 безпосередньо.


Відповіді:


1436

Це можна зробити за допомогою 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>Урі, якщо ви хочете націлити Google Play перевірити Berťák відповідь


53
якщо ви хочете переспрямувати всі програми розробника, які використовуєте, market://search?q=pub:"+devNameіhttp://play.google.com/store/search?q=pub:"+devName
Стефано Мунаріні,

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, не відкриваючи профіль додатка. Як запропонував TrevorWiley у своєму коментарі, це 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, і це, здається, вирішує проблему
TrevorWiley

Я використав Intent.FLAG_ACTIVITY_CLEAR_TOP | Намір.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, але не працює. немає жодної інстанції магазину Play
Praveen Kumar Verma,

3
Що станеться, якщо ви rateIntent.setPackage("com.android.vending")впевнені, що додаток PlayStore впорається з цим наміром, а не всім цим кодом?
dum4ll3

3
@ dum4ll3 Я думаю, ви можете, але цей код також неявно перевіряє, чи встановлено додаток Google Play. Якщо ви цього не перевірите, вам потрібно зловити на ActivityNotFound
Daniele Segato

81

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

Офіційне посилання для Android Developer

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


Використання ринку: // префікс більше не рекомендується (перевірте посилання, яке ви опублікували)
Грег Енніс

@GregEnnis, де ви бачите, що ринок: // префікс більше не рекомендується?
loki

@loki Я думаю, справа в тому, що вона вже не перерахована як пропозиція. Якщо ви шукаєте на цій сторінці слово, marketви не знайдете жодного рішення. Я думаю, що новий спосіб - це звільнити більш загальний розробник намірів.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-n50


7

Ви можете зробити:

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

отримати довідку тут :

Ви також можете спробувати підхід, описаний у прийнятій відповіді на це запитання: Неможливо визначити, встановлений чи ігровий магазин Google на пристрої Android


Я вже намагався з цим кодом, це також показує можливість вибору браузера / магазину гри, оскільки на моєму пристрої встановлено обидва додатки (google play store / browser).
Раджеш Кумар

Про те, як самостійно відкрити 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, ви можете запустити його наступним чином:

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

Для цього моя функція розширення котліну

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, а конкретно ігровий магазин, якщо це не вдасться, він запустить перегляд дій за допомогою веб-версії: Кредити до @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

Це посилання автоматично відкриє додаток на ринку: // якщо ви перебуваєте на 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-адреса магазину, вона показує кнопку відкритого магазину. тому мені потрібно відкрити додаток, натиснувши цю кнопку. це буде динамічно для будь-якої програми, тож як я можу керувати?
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", що
говорити

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.