Проверьте, добавлено ли веб-приложение на главный экран Android

У меня есть веб-приложение, и на Android я хотел бы показать предупреждение о том, как добавить мое приложение на главный экран. (Добавьте его в «Закладки», а затем «Добавить его на главный экран» или «Добавить в ярлык в доме»). Затем на экране появится значок, который откроет мое приложение.

Но, конечно, я хочу, чтобы это показывало, не добавлено ли приложение на главный экран.

Кто-нибудь знает, как это сделать? Любой вход оценили, спасибо.

Короткий ответ: с веб-сайта вы не можете.

Более длинный ответ: с веб-сайта вы можете получить подсказку в Chrome.

Chrome на Android две новые функции: 1) Web App Manifest, который описывает, что должно быть запущено с beforeinstallprompt экрана и как оно должно выглядеть на главном экране , и 2) Chrome теперь имеет событие beforeinstallprompt которое будет запускаться для веб-приложений, которые, по нашему мнению, являются приложением И может быть установлен на рабочий стол.

Существует ряд критериев для события onbeforeinstallprompt которое может сделать его «хорошим» эвристическим (хотя я и не подозреваю).

Событие срабатывает только в том случае, если:

  • Сайт имеет манифест, находится на https и имеет сервисного работника. (Это может быть довольно растянуто).
  • Пользователь взаимодействует с сайтом несколько раз (прямо сейчас, дважды в течение как минимум 5 минут).
  • Пользователь еще не добавил ваш сайт на главный экран.

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

У нас также есть полный выбор образцов на нашем сайте образцов .

Да, ты можешь.

Хотя технически страница, открытая на вкладке браузера Chrome, не может напрямую проверить, существует ли ярлык на localStorage экране, локальные данные страницы ( localStorage , IndexedDB) разделяются между экземпляром главного экрана и вкладками браузера, поэтому это можно использовать для сообщения о существовании Версия домашнего экрана.

  1. Обнаруживать, запущено ли приложение с главного экрана
  2. Если он localStorage с localStorage экрана, сохраните этот факт в localStorage
  3. Прибыль! (Прочитав это из localStorage на любой вкладке)

Когда приложение находится в автономном режиме (что возможно только при запуске с домашнего экрана), запрос на мультимедийные запросы CSS (display-mode: standalone) будет соответствовать. В Javascript вы можете прочитать его, используя:

 matchMedia('(display-mode: standalone)').matches 

(Кстати: нестандартный эквивалент iOS – это navigator.standalone , но iOS не разделяет состояние между домашним экраном и Safari, поэтому вам там не повезло).

Однако вместо пользовательских инструкций я предлагаю найти критерии Chrome для «прогрессивного веб-приложения» и позволить Chrome сделать запрос для вас.

Я думаю, вы можете это сделать. Просто добавьте строку запроса в start_url в manifest.json и в вашей проверке javascript, если URL-адрес начала имеет эту строку запроса. Если строка запроса найдена, тогда установлено приложение.

Сначала вы получаете список приложений на устройстве

  List<ApplicationInfo> packs = pm.getInstalledApplications(0); 

То вы используете getLaunchIntentForPackage ()

Теперь, когда у вас есть список пакетов, установленных на вашем устройстве, пройдите через них и вызовите getLaunchIntentForPackage () для каждого элемента.

Если возвращается действительное намерение, оно существует в Launcher, иначе, если возвращается null, пакет не запускается с экрана Launcher. Обратите внимание, что ярлыки на главном экране являются подмножеством приложений Launcher.