Interfejs Notification Activates API

Wyzwalacze powiadomień umożliwiają planowanie powiadomień lokalnych, które nie wymagają połączenia sieciowego, dzięki czemu idealnie nadają się do zastosowań takich jak aplikacje kalendarza.

Co to są aktywatory powiadomień?

Programiści stron internetowych mogą wyświetlać powiadomienia za pomocą interfejsu Web Notification API. Ta funkcja jest często wykorzystywana w połączeniu z interfejsem API Push do informowania użytkowników o ograniczonych czasowo informacjach, takich jak aktualności lub otrzymane wiadomości. Powiadomienia są wyświetlane po uruchomieniu JavaScriptu na urządzeniu użytkownika.

Problem z interfejsem Push API polega na tym, że nie jest on niezawodne w przypadku aktywowania powiadomień, które muszą być wyświetlane, gdy spełniony jest określony warunek, taki jak czas lub lokalizacja. Przykładem warunku zależnego od czasu jest powiadomienie z kalendarza, które przypomina o ważnym spotkaniu z szefem o godzinie 14:00. Przykładem warunku zależnego od lokalizacji może być powiadomienie przypominające o konieczności zakupu mleka, gdy znajdujesz się w pobliżu sklepu spożywczego. Połączenia sieciowe lub funkcje oszczędzające baterię, takie jak tryb uśpienia, mogą opóźniać dostarczanie powiadomień push.

Wyzwalacze powiadomień pozwalają rozwiązać ten problem, umożliwiając zaplanowanie wyświetlania powiadomień z wyprzedzeniem. Dzięki temu system operacyjny wyśle je w odpowiednim momencie, nawet jeśli nie ma połączenia z siecią lub urządzenie działa w trybie oszczędzania baterii.

Przypadki użycia

Aplikacje do obsługi kalendarza mogą wykorzystywać wyzwalacze powiadomień zależne od czasu, aby przypominać użytkownikowi o nadchodzących spotkaniach. Domyślnym schematem powiadomień w przypadku aplikacji kalendarzowej może być pierwsze powiadomienie z ostrzeżeniem na godzinę przed spotkaniem, a kolejne na pięć minut przed spotkaniem.

Sieć telewizyjna może przypominać użytkownikom, że zbliża się transmisja ich ulubionego serialu lub transmisji na żywo z konferencji.

Witryny do zmiany strefy czasowej mogą stosować reguły wyświetlania powiadomień zależne od czasu, aby użytkownicy mogli planować alarmy dla rozmów telefonicznych lub wideo.

Obecny stan,

Step Stan
1. Utwórz wyjaśnienie Zakończono
2. Utwórz wstępną wersję roboczą specyfikacji Nie rozpoczęto
3. Zbieraj opinie i ponownie ulepszaj projekt. W toku
4. Testowanie origin Odpowiedź była wyczerpująca
5. Uruchom Nie rozpoczęto

Jak używać reguł powiadomień

Włączanie za pomocą about://flags

Aby poeksperymentować z interfejsem Notification Triggers API lokalnie bez tokena próbnego origin, włącz flagę #enable-experimental-web-platform-features w about://flags.

Wykrywanie funkcji

Aby dowiedzieć się, czy przeglądarka obsługuje reguły powiadomień, sprawdź, czy istnieje właściwość showTrigger:

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

Planowanie wyświetlania powiadomienia

Planowanie powiadomień przypomina wyświetlanie zwykłego powiadomienia push, z tą różnicą, że trzeba przekazać właściwość warunku showTrigger z obiektem TimestampTrigger jako wartością obiektu options powiadomienia.

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 danego tagu, do ServiceWorkerRegistration.getNotifications(). Pamiętaj, że aby pojawić się na liście zaplanowane powiadomienia, musisz zadeklarować 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

Powiadomienia możesz debugować w panelu powiadomień w Narzędziach deweloperskich w Chrome. Aby rozpocząć debugowanie, naciśnij Rozpocznij rejestrowanie zdarzeń Rozpocznij rejestrowanie zdarzeńlub Control + E (Command + E na Macu). Narzędzia deweloperskie w Chrome rejestrują wszystkie zdarzenia dotyczące powiadomień, w tym zaplanowane, wyświetlane i zamknięte powiadomienia, przez 3 dni, nawet po ich zamknięciu.

Zaplanowane zdarzenie powiadomienia zostało zarejestrowane w panelu Powiadomienia Narzędzi deweloperskich w Chrome, który znajduje się w panelu Aplikacje.
Zaplanowane powiadomienie.
W panelu Powiadomienia w Narzędziach deweloperskich w Chrome zostało zarejestrowane zdarzenie związane z wyświetlonym powiadomieniem.
Wyświetlone powiadomienie.

Wersja demonstracyjna

Aktywatory powiadomień możesz zobaczyć w prezentacji. Dzięki temu możesz planować powiadomienia, wyświetlać zaplanowane powiadomienia oraz je anulować. Kod źródłowy jest dostępny na stronie Glitch.

Zrzut ekranu przedstawiający demonstracyjną aplikację internetową aktywatorów powiadomień.
Prezentacja aktywatorów powiadomień.

Zabezpieczenia i uprawnienia

Zespół Chrome zaprojektował i wdrożył interfejs Notification Triggers API zgodnie z podstawowymi zasadami określonymi w artykule Kontrolowanie dostępu do zaawansowanych funkcji platformy internetowej, w tym dotyczących kontroli użytkownika, przejrzystości działania i ergonomii. Ten interfejs API wymaga mechanizmów Service Worker, dlatego wymaga też bezpiecznego kontekstu. Korzystanie z interfejsu API wymaga tych samych uprawnień co zwykłe powiadomienia push.

Kontrola użytkowników

Ten interfejs API jest dostępny tylko w kontekście obiektu ServiceWorkerRegistration. Oznacza to, że wszystkie wymagane dane są przechowywane w tym samym kontekście i są automatycznie usuwane, gdy skrypt service worker zostanie usunięty lub użytkownik usunie wszystkie dane witryny dotyczące źródła. Blokowanie plików cookie uniemożliwia też instalowanie skryptów service worker w Chrome, a tym samym używanie tego interfejsu API. Użytkownik zawsze może wyłączyć powiadomienia dotyczące witryny w ustawieniach witryny.

Przejrzystość

W przeciwieństwie do interfejsu Push API ten interfejs API nie zależy od sieci, co oznacza, że zaplanowane powiadomienia potrzebują wcześniej wszystkich wymaganych danych, w tym zasobów obrazu, do których odwołują się atrybuty badge, icon i image. Oznacza to, że deweloper nie może obserwować zaplanowanego powiadomienia i nie wymaga wybudzania skryptu service worker, dopóki użytkownik nie wejdzie z nim w interakcję. W związku z tym obecnie nie wiadomo, jak deweloper mógłby uzyskać informacje o użytkowniku za pomocą metod potencjalnie naruszających prywatność, takich jak wyszukiwanie geolokalizacji pod kątem adresów IP. Umożliwia to też opcjonalnie korzystanie z mechanizmów planowania dostępnych w systemie operacyjnym, np. AlarmManager Androida, co pomaga oszczędzać baterię.

Prześlij opinię

Zespół Chrome chce poznać Twoją opinię o regułach wyświetlania powiadomień.

Opowiedz nam o konstrukcji interfejsu API

Czy jest coś, co nie działa w interfejsie API zgodnie z oczekiwaniami? A może brakuje metod lub właściwości, które potrzebujesz do realizacji pomysłu? Masz pytanie lub komentarz na temat modelu zabezpieczeń? Zgłoś problem ze specyfikacją w repozytorium powiadomień wyzwalaczy powiadomień na GitHubie lub dodaj swoje uwagi do istniejącego problemu.

Problem z implementacją?

Czy wystąpił błąd w implementacji Chrome? A może implementacja różni się od specyfikacji? Zgłoś błąd na stronie new.crbug.com. Podaj jak najwięcej szczegółów i proste instrukcje odtwarzania oraz ustaw Komponenty na UI>Notifications. Funkcja Glitch świetnie nadaje się do szybkiego i łatwego odtwarzania błędów.

Planujesz korzystać z interfejsu API?

Planujesz zastosować w swojej witrynie reguły wyświetlania powiadomień? Twoja publiczna pomoc pomoże nam nadać priorytet funkcjom i pokazać innym dostawcom przeglądarek, jak ważne jest ich wsparcie. Wyślij tweeta na adres @ChromiumDev, używając hashtagu #NotificationTriggers, i daj nam znać, gdzie i jak go używasz.

Przydatne linki

Podziękowania

Aktywatory powiadomień zostały wdrożone przez Richarda Knolla i Petera Beverloo przy pomocy Richarda. Artykuł przeczytały następujące osoby: Joe Medley, Pete LePage oraz Richard i Peter. Baner powitalny: Lukas Blazek w serwisie Unsplash.