PWA в Angular и пользовательская установка

#angular #installation #progressive-web-apps

#angular #установка #progressive-веб-приложения

Вопрос:

Я чувствую себя очень глупо, спрашивая об этом, но я новичок в Angular и javascript в целом, поэтому я здесь в недоумении. Мой проект работает нормально (он довольно прост) и внес все изменения, чтобы он стал PWA (и это так), но есть одна вещь, которую я не могу понять.

Моя проблема в том, что мое приложение, похоже, не запускает beforeinstallprompt действие. Я запустил lighthouse, и мое приложение полностью доступно для установки и готово к pwa (https, service worker, manifest и т. Д.), Но я не могу отследить, почему это событие не запускается (консоль ничего не показывает).

На самом деле проблема больше, поскольку я ни за что на свете не могу понять, как я могу на самом деле создать пользовательскую, скажем, кнопку для установки pwa. Я читал это и это, и я много раз видел это, кроме тонны одного и того же, более или менее, вопроса в SO, но я не могу понять некоторые основные вещи. Например, я повсюду вижу этот фрагмент, который прослушивает событие и сохраняет его для последующего использования:

 let deferredPrompt;

window.addEventListener('beforeinstallprompt', (e) => {
  // Prevent the mini-infobar from appearing on mobile
  e.preventDefault();
  // Stash the event so it can be triggered later.
  deferredPrompt = e;
  // Update UI notify the user they can install the PWA
  showInstallPromotion();
});
 

или это, которое запускает процесс пользовательской установки:

 buttonInstall.addEventListener('click', (e) => {
 // Hide the app provided install promotion
  hideMyInstallPromotion();
  // Show the install prompt
  deferredPrompt.prompt();
  // Wait for the user to respond to the prompt
  deferredPrompt.userChoice.then((choiceResult) => {
    if (choiceResult.outcome === 'accepted') {
      console.log('User accepted the install prompt');
    } else {
      console.log('User dismissed the install prompt');
    }
  });
});
 

но дело в том, что я не знаю, должно ли это быть в файле шаблона (например example.component.html ), файл ts (например, example.component.ts), корневой файл ts (например, app.component.ts) или мне нужно создать сервис или что-то совершенно другое. Кто-то может — очень правильно — сказать, продолжайте и делайте свою домашнюю работу, но дело в том, что я, похоже, не могу найти нужный ресурс или я настолько глуп (скорее всего, последнее применимо).

Итак, мой реальный вопрос в том, может ли кто-нибудь указать как можно более подробно, где должен находиться мой код, потому что angular очень красивый и аккуратный, но я глупый?

Спасибо, что нашли время для чтения этого, действительно ценю это.

Комментарии:

1. Вы тестируете установку по протоколу HTTPS?

2. Вы полностью очистили свой кеш от предыдущих тестов / установок?

3. Да, я пробовал разные браузеры, как в обычном, так и в режиме инкогнито, очистил кеш, все. Но независимо от того, что я делаю, beforeinstallprompt похоже, не срабатывает.

4. Вот простой пример, который я создал, который показывает кнопку установки. Ему уже пару лет, но я думаю, что код все еще близок. a2hs.glitch.me

5. Источник для приведенного выше здесь github.com/ng-chicago/AddToHomeScreen