Działania związane z powiadomieniami w Chrome 48

Na początku 2015 r. wprowadziliśmy w Chrome na Androida i na komputery powiadomienia i wiadomości push. To był duży krok naprzód w internecie. Użytkownicy mogli zacząć bardziej angażować się w działania w internecie, nawet gdy przeglądarka była zamknięta.

Chociaż możesz wysyłać te wiadomości, jedyne, co możesz zrobić, to kliknąć je i otworzyć stronę lub całkowicie je zamknąć.

Jeśli przyjrzysz się powiadomieniom wyświetlanym natywnie w aplikacjach na platformach mobilnych, takim jak iOS czy Android, zauważysz, że w każdym przypadku deweloper może zdefiniować działania kontekstowe, które użytkownik może wywołać i z nimi wchodzić w interakcję. W Chrome 48 dodaliśmy podobną funkcję powiadomień internetowych na komputerach i w Chrome na Androida.

Zrzut ekranu powiadomienia

Dodanie do interfejsu API jest bardzo proste. Wystarczy, że utworzysz tablicę działań i dodasz ją do obiektu NotificationOptions, gdy wywołasz funkcję showNotification z rejestracji ServiceWorker (bezpośrednio w ServiceWorker lub na stronie za pomocą navigator.serviceWorker.ready).

Obecnie Chrome obsługuje tylko 2 działania dotyczące każdego powiadomienia. Niektóre platformy mogą obsługiwać więcej, a inne mniej lub wcale. Aby sprawdzić, co jest obsługiwane na danej platformie, otwórz Notification.maxActions. W następujących przykładach zakładamy, że platforma obsługuje 2 działania.

self.registration.showNotification('New message from Alice', {
  actions: [
    {action: 'like', title: 'Like'},
    {action: 'reply', title: 'Reply'}]
});

Spowoduje to utworzenie prostego powiadomienia z 2 przyciskami. Pamiętaj, że nie możesz bezpośrednio dodawać ikon do działania (jeszcze), ale możesz użyć emotikonów i rozszerzonego zestawu znaków Unicode, aby dodać więcej kontekstu do przycisków powiadomień.

Na przykład:

self.registration.showNotification("New message from Alice", {
  actions: [
    {action: 'like', title: '👍Like'},
    {action: 'reply', title: '⤻ Reply'}]
});

Po utworzeniu powiadomienia i nadaniu mu atrakcyjnego wyglądu 😻 użytkownik może w przyszłości z nim wejść w interakcję. Interakcje z powiadomieniem są obecnie (w Chrome 48) rejestrowane w usługach workera za pomocą zdarzenia notificationclick. Mogą to być kliknięcia powiadomienia lub dotknięcia jednego z przycisków akcji. W przyszłości będziesz też mieć możliwość odpowiedzi na zdarzenienotificationclose.

Aby dowiedzieć się, jakie działanie wykonał użytkownik, musisz sprawdzić właściwość action w przypadku danego zdarzenia. Następnie możesz otworzyć nową stronę, aby użytkownik wykonał działanie, lub wykonać zadanie w tle.

self.addEventListener('notificationclick', function(event) {
  var messageId = event.notification.data;

  event.notification.close();

  if (event.action === 'like') {
    silentlyLikeItem();
  }
  else if (event.action === 'reply') {
    clients.openWindow("/messages?reply=" + messageId);
  }
  else {
    clients.openWindow("/messages?reply=" + messageId);
  }
}, false);

Ciekawostką jest to, że działania nie muszą otwierać nowego okna. Mogą one wykonywać ogólne interakcje z aplikacją bez tworzenia interfejsu użytkownika. Użytkownik może na przykład „polubić” lub „usunąć” wpis w mediach społecznościowych, co spowoduje wykonanie tej czynności na danych lokalnych, a następnie zsynchronizowanie ich z chmurą bez otwierania interfejsu użytkownika (chociaż dobrą praktyką jest wysłanie wiadomości o zmianie danych do wszystkich otwartych okien, aby można było zaktualizować interfejs). W przypadku działania wymagającego interakcji z użytkownikiem otwórz okno, w którym użytkownik będzie mógł udzielić odpowiedzi.

Platformy nie obsługują tej samej liczby działań, a w niektórych przypadkach wcale nie obsługują przycisków akcji powiadomienia. Dlatego zawsze musisz zapewnić rozsądne działanie zastępcze, które będzie zgodne z oczekiwaniami użytkownika, gdyby kliknął powiadomienie.

Jeśli chcesz zobaczyć, jak to działa, zapoznaj się z testami powiadomień Petera Beverloo oraz przeczytaj specyfikację powiadomień lub śledź aktualizacje specyfikacji.