Глубокая ссылка на приложение Google Play показывает стартовую страницу Google Play - PullRequest
0 голосов
/ 13 мая 2018

Я скопировал исходный код этого популярного вопроса о том, как сделать ссылку «Оценить это приложение» в приложении Google Play Store на телефоне. .

В моей Android Studio (версия 3.1.2) с эмулятором это работает отлично. Однако на моем устройстве Samsung Galaxy A5 (2017) (Android 8.0) по ссылке всегда открывается приложение Google Play, но вместо страницы приложения отображается стартовая страница.

Интересно, почему они действуют по-разному, и что я могу сделать, чтобы это работало и на моем устройстве. Интересно, есть ли какая-либо настройка, установленная на моем устройстве, которая предотвращает глубокую ссылку?

Мой код:

Uri uri = Uri.parse("market://details?id=" + getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);       
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())));
}

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Очевидно, getPackageName() не возвращает нужное вам значение. От того, из какого контекста вы его получите, зависит, где работает ваш код.

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

getApplicationContext().getPackageName()
0 голосов
/ 18 мая 2018

Я на 100% уверен, что проблема в вашем телефоне, а не в вашем коде.

У моего телефона не было этой проблемы, и я смог воспроизвести ее, изменив одну из баз данных SQLite, которые поставляются со Службами Google Play. Ниже я объясняю, как это произошло на моем телефоне, а также как проблема может быть решена в вашем телефоне.

Как воспроизвести ошибку на телефоне, у которого его нет

Во-первых, я удостоверился, что в настройках разработчика моего телефона для параметра root-доступа установлено значение «Только ADB» или «ADB и приложения». Затем я запустил adb root и adb shell, чтобы получить доступ к устройству с помощью командной строки`

Оказавшись внутри, я запустил su, чтобы стать пользователем root.

Затем я пошел в каталог /data/data/com.google.android.gsf/databases, где была база данных gservices.db, которую я хотел изменить.

Чтобы прочитать и записать базу данных, я запустил sqlite3 gservices.db, и в этой базе данных есть таблица с именем overrides. Чтобы просмотреть содержимое этой таблицы, я запустил команду SELECT * FROM overrides;, обращая внимание на то, чтобы не забыть последнюю точку с запятой.

В моем случае таблица была полностью пуста, но я уверен, что в вашем телефоне что-то есть, потому что для воспроизведения ошибки на вашем телефоне я запустил эту команду (снова запомните точку с запятой):

INSERT INTO overrides VALUES ("finsky.launch_urls_enabled", "false");

Для выхода из sqlite3 я ввел .exit, а затем перезагрузил свой телефон.

Результаты

После перезагрузки я попробовал ваш код и вуаля, он перешел на главную страницу Google Play вместо страницы приложения. Я даже зашел в пользовательские настройки Amaze File Manager , по которым вы можете оценить приложение, и результат тот же, он пошел на домашнюю страницу.

Как удалить ошибку (умозрительную)

Вы можете попробовать выполнить описанные выше шаги, заменив оператор SQLite INSERT следующим:

UPDATE overrides SET value="false" WHERE name="finsky.launch_urls_enabled"

0 голосов
/ 15 мая 2018

Попробуйте это

  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())));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...