Interfejs Notification Activates API

Opublikowano: 24 października 2019 r.

Czym są wyzwalacze powiadomień?

Deweloperzy stron internetowych mogą wyświetlać powiadomienia za pomocą interfejsu Web Notifications API. Ta funkcja jest często używana z interfejsem Push API, aby informować użytkownika o informacjach wymagających natychmiastowej reakcji, takich jak najnowsze wiadomości czy otrzymane wiadomości. Powiadomienia są wyświetlane przez uruchomienie JavaScriptu na urządzeniu użytkownika.

Problem z interfejsem Push API polega na tym, że nie jest on niezawodny w przypadku wywoływania powiadomień, które muszą być wyświetlane po spełnieniu określonego warunku, np. czasu lub lokalizacji. Przykładem warunku opartego na czasie jest powiadomienie w kalendarzu, które przypomina o ważnym spotkaniu z szefem o godzinie 14:00. Przykładem warunku opartego na lokalizacji jest powiadomienie przypominające o zakupie mleka, gdy znajdziesz się w pobliżu sklepu spożywczego. Łączność z siecią lub funkcje oszczędzania baterii, takie jak tryb uśpienia, mogą opóźniać dostarczanie powiadomień push.

Wywoływanie powiadomień rozwiązuje ten problem, ponieważ umożliwia zaplanowanie powiadomień z wyprzedzeniem wraz z warunkiem wywołującym. Dzięki temu system operacyjny dostarczy powiadomienie we właściwym czasie, nawet jeśli nie ma połączenia z siecią lub urządzenie jest w trybie oszczędzania baterii.

Przypadki użycia

Aplikacje kalendarza mogą używać wyzwalaczy powiadomień opartych na czasie, aby przypominać użytkownikowi o nadchodzących spotkaniach. Domyślny schemat powiadomień w aplikacji kalendarza może polegać na wyświetlaniu pierwszego powiadomienia z wyprzedzeniem na godzinę przed spotkaniem, a następnie drugiego, pilniejszego powiadomienia na 5 minut przed spotkaniem.

Sieć telewizyjna może przypominać użytkownikom, że ich ulubiony program telewizyjny lub transmisja na żywo z konferencji wkrótce się rozpocznie.

Witryny do konwersji stref czasowych mogą używać wyzwalaczy powiadomień opartych na czasie, aby umożliwić użytkownikom planowanie alarmów dotyczących konferencji telefonicznych lub połączeń wideo.

Obecny stan,

Krok Stan
1. Tworzenie wyjaśnienia Zakończono
2. Tworzenie wstępnej wersji specyfikacji Nie rozpoczęto
3. Zbieraj opinie i ulepszaj projekt. W toku
4. Wersja próbna origin Zakończone
5. Uruchom Nie rozpoczęto

Używanie reguł powiadomień

Aby eksperymentować z interfejsem Notification Triggers API lokalnie, bez tokena testowania origin, włącz flagę #enable-experimental-web-platform-featuresabout://flags.

Wykrywanie cech

Aby sprawdzić, czy przeglądarka obsługuje wyzwalacze powiadomień, sprawdź, czy istnieje właściwość showTrigger:

if ('showTrigger' in Notification.prototype) {
  /* Notification Triggers supported */
}

Planowanie powiadomienia

Planowanie powiadomienia jest podobne do wyświetlania zwykłego powiadomienia push, z tą różnicą, że musisz przekazać właściwość warunku showTrigger z obiektem TimestampTrigger jako wartość do obiektu powiadomienia options.

const createScheduledNotification = async (tag, title, timestamp) => {
  const registration = await navigator.serviceWorker.getRegistration();
  registration.showNotification(title, {
    tag: tag,
    body: 'This notification was scheduled 30 seconds ago',
    showTrigger: new TimestampTrigger(timestamp + 30 * 1000),
  });
};

Anulowanie zaplanowanego powiadomienia

Aby anulować zaplanowane powiadomienia, najpierw poproś o listę wszystkich powiadomień, które pasują do określonego tagu, za pomocą ServiceWorkerRegistration.getNotifications(). Pamiętaj, że aby zaplanowane powiadomienia były uwzględniane na liście, musisz przekazać flagę includeTriggered:

const cancelScheduledNotification = async (tag) => {
  const registration = await navigator.serviceWorker.getRegistration();
  const notifications = await registration.getNotifications({
    tag: tag,
    includeTriggered: true,
  });
  notifications.forEach((notification) => notification.close());
};

Debugowanie

Do debugowania powiadomień możesz użyć panelu Powiadomienia w Narzędziach Chrome dla programistów. Aby rozpocząć debugowanie, kliknij Rozpocznij rejestrowanie zdarzeń Rozpocznij rejestrowanie zdarzeń lub naciśnij Control+E (Command+E na Macu). Narzędzia deweloperskie w Chrome rejestrują wszystkie zdarzenia powiadomień, w tym zaplanowane, wyświetlone i zamknięte powiadomienia, przez 3 dni, nawet gdy są zamknięte.

Zaplanowane zdarzenie powiadomienia zostało zarejestrowane w panelu Powiadomienia w Narzędziach deweloperskich Chrome, który znajduje się w panelu Aplikacja.
Zaplanowane powiadomienie.
W panelu Powiadomienia w Narzędziach deweloperskich Chrome zarejestrowano zdarzenie wyświetlonego powiadomienia.
Wyświetlone powiadomienie.

Prezentacja

W demonstracji można było zobaczyć działanie wyzwalaczy powiadomień, które umożliwiały planowanie powiadomień, wyświetlanie listy zaplanowanych powiadomień i ich anulowanie.

Wersja demonstracyjna aplikacji internetowej Notification Triggers.

Zabezpieczenia i uprawnienia

Zespół Chrome zaprojektował i wdrożył interfejs Notification Triggers API zgodnie z głównymi zasadami określonymi w dokumencie Controlling Access to Powerful Web Platform Features, w tym z zasadami dotyczącymi kontroli użytkownika, przejrzystości i ergonomii. Ten interfejs API wymaga mechanizmów Service Worker, a co za tym idzie – bezpiecznego kontekstu. Korzystanie z interfejsu API wymaga tych samych uprawnień co zwykłe powiadomienia push.

Kontrola sprawowana przez użytkowników

Ten interfejs API jest dostępny tylko w kontekście ServiceWorkerRegistration. Oznacza to, że wszystkie wymagane dane są przechowywane w tym samym kontekście i są automatycznie usuwane, gdy pracownik usługi zostanie usunięty lub gdy użytkownik usunie wszystkie dane witryny dla danego pochodzenia. Blokowanie plików cookie uniemożliwia też instalowanie w Chrome service workerów, a tym samym korzystanie z tego interfejsu API. Użytkownik może zawsze wyłączyć powiadomienia w ustawieniach witryny.

Przejrzystość

W odróżnieniu od interfejsu Push API ten interfejs nie zależy od sieci, co oznacza, że zaplanowane powiadomienia muszą mieć wcześniej wszystkie wymagane dane, w tym zasoby obrazów, do których odwołują się atrybuty badge, iconimage. Oznacza to, że wyświetlanie zaplanowanego powiadomienia nie jest widoczne dla dewelopera i nie wymaga wybudzania service workera, dopóki użytkownik nie wejdzie w interakcję z powiadomieniem.

W dniu publikacji artykułu nie ma znanych sposobów, w jakie deweloper mógłby uzyskać informacje o użytkowniku, stosując metody potencjalnie naruszające prywatność, takie jak wyszukiwanie lokalizacji geograficznej na podstawie adresu IP. Taka konstrukcja umożliwia też opcjonalne korzystanie z mechanizmów planowania udostępnianych przez system operacyjny, takich jak AlarmManager w Androidzie, co pomaga oszczędzać baterię.

Prześlij opinię

Zespół Chrome chce poznać Twoje wrażenia związane z wyzwalaczami powiadomień.

Opisz projekt interfejsu API

Czy w API jest coś, co nie działa tak, jak oczekujesz? Czy brakuje metod lub właściwości, które są potrzebne do realizacji Twojego pomysłu? Masz pytania lub uwagi dotyczące modelu zabezpieczeń? Zgłoś problem ze specyfikacją w repozytorium GitHub dotyczącym wyzwalaczy powiadomień lub dodaj swoje uwagi do istniejącego problemu.

Masz problem z implementacją?

Czy w implementacji Chrome występuje błąd? A może implementacja różni się od specyfikacji? Zgłoś błąd na stronie new.crbug.com. Podaj jak najwięcej szczegółów, w tym instrukcje odtwarzania, i ustaw komponenty na UI>Notifications.

Planujesz korzystać z interfejsu API?

Planujesz używać w witrynie wyzwalaczy powiadomień? Twoje publiczne wsparcie pomaga nam określać priorytety dotyczące funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest ich obsługiwanie. Wyślij tweeta do @ChromiumDev z hasztagiem #NotificationTriggers i napisz, gdzie i jak korzystasz z tej funkcji.

Przydatne linki

Podziękowania

Interfejs Notification Triggers został wdrożony przez Richarda Knolla, a wyjaśnienie zostało napisane przez Petera Beverloo przy udziale Richarda. Artykuł został sprawdzony przez następujące osoby: Joe Medley, Pete LePage, a także Richard i Peter.