Wyświetlanie powiadomienia

Opcje powiadomień zostały podzielone na 2 sekcje. W pierwszej zajmujemy się aspektami wizualnymi (ten ), a drugi wyjaśniający sposób działania powiadomień (następna sekcja).

Możesz wypróbować różne opcje powiadomień w różnych przeglądarkach na różnych platformach z udziałem Petera Beverloo Generator powiadomień.

Opcje wizualne

Interfejs API do wyświetlania powiadomień jest prosty:

<ServiceWorkerRegistration>.showNotification(<title>, <options>);

Oba argumenty (title i options) są opcjonalne.

Tytuł jest ciągiem znaków, a opcje mogą być dowolnymi z tych elementów:

{
  "//": "Visual Options",
  "body": "<String>",
  "icon": "<URL String>",
  "image": "<URL String>",
  "badge": "<URL String>",
  "dir": "<String of 'auto' | 'ltr' | 'rtl'>",
  "timestamp": "<Long>"

  "//": "Both visual & behavioral options",
  "actions": "<Array of Strings>",
  "data": "<Anything>",

  "//": "Behavioral Options",
  "tag": "<String>",
  "requireInteraction": "<boolean>",
  "renotify": "<Boolean>",
  "vibrate": "<Array of Integers>",
  "sound": "<URL String>",
  "silent": "<Boolean>",
}

Przyjrzyjmy się opcjom wizualnym:

Sekcja interfejsu powiadomienia.

Opcje tytułu i treści

Tak wygląda powiadomienie bez tytułu i opcji w Chrome na Windows:

Powiadomienie bez tytułu i opcji w Chrome na Windows.

Jak widać, nazwa przeglądarki jest używana jako tytuł oraz „Nowe powiadomienie” zmienna to używany jako treść powiadomienia.

Jeśli na urządzeniu jest zainstalowana progresywna aplikacja internetowa, zamiast niej zostanie użyta nazwa aplikacji internetowej nazwy przeglądarki:

Powiadomienie zawierające nazwę aplikacji internetowej zamiast nazwy przeglądarki.

Jeśli uruchomiliśmy ten kod:

const title = 'Simple Title';

const options = {
  body: 'Simple piece of body text.\nSecond line of body text :)',
};

registration.showNotification(title, options);

zobaczylibyśmy takie powiadomienie w Chrome na Linuksa:

Powiadomienie z tytułem i tekstem głównym w Chrome na Linuksa.

W przeglądarce Firefox w systemie Linux będzie to wyglądać tak:

Powiadomienie z tytułem i treścią w przeglądarce Firefox w systemie Linux.

Tak wygląda powiadomienie z dużą ilością tekstu w tytule i treści w Chrome na urządzeniu Linux:

Powiadomienie z długim tytułem i tekstem głównym w Chrome na Linuksa.

Firefox w systemie Linux zwija tekst główny do momentu najechania kursorem na powiadomienie, przez co powiadomienie do rozwinięcia:

Powiadomienie z długim tytułem i tekstem w przeglądarce Firefox w systemie Linux.

Powiadomienie z długim tytułem i tekstem głównym w przeglądarce Firefox w systemie Linux podczas najeżdżania kursorem na powiadomienie.

Takie same powiadomienia w Firefoksie w systemie Windows wyglądają tak:

Powiadomienie z tytułem i treścią w przeglądarce Firefox w systemie Windows.

Powiadomienie z długim tytułem i tekstem w przeglądarce Firefox w systemie Windows.

Jak widzisz, to samo powiadomienie może wyglądać inaczej w różnych przeglądarkach. Może też wyglądać w tej samej przeglądarce i na różnych platformach.

Chrome i Firefox korzystają z powiadomień systemowych i centrum powiadomień na platformach, na których te są dostępne.

Na przykład powiadomienia systemowe w systemie macOS nie obsługują obrazów ani działań (przycisków i przycisków) odpowiedzi).

Chrome ma też niestandardowe powiadomienia dla wszystkich platform komputerowych. Aby ją włączyć, ustaw chrome://flags/#enable-system-notifications do stanu Disabled.

Ikona

Opcja icon to w zasadzie mały obraz wyświetlany obok tytułu i tekstu głównego.

W kodzie musisz podać adres URL obrazu, który chcesz wczytać:

const title = 'Icon Notification';

const options = {
  icon: '/images/demos/icon-512x512.png',
};

registration.showNotification(title, options);

W Chrome na Linuksie pojawia się takie powiadomienie:

Powiadomienie z ikoną w Chrome na Linuksa.

oraz w przeglądarce Firefox w systemie Linux:

Powiadomienie z ikoną w przeglądarce Firefox w systemie Linux.

Niestety nie ma konkretnych wytycznych dotyczących rozmiaru obrazu ikony.

Wygląda na to, że Android chce mieć obraz w rozdzielczości 64 dp (co stanowi wielokrotność 64 pikseli przez proporcje piksela urządzenia).

Zakładając, że najwyższy współczynnik pikseli w przypadku urządzenia wynosi 3, ikona rozmiaru 192 piksele lub większa bezpieczne.

Plakietka

badge to mała monochromatyczna ikona, która przedstawia dodatkowe informacje skąd pochodzi powiadomienie:

const title = 'Badge Notification';

const options = {
  badge: '/images/demos/badge-128x128.png',
};

registration.showNotification(title, options);

W chwili pisania plakietki jest używana tylko w Chrome na urządzeniach z Androidem.

Powiadomienie z plakietką w Chrome na Androida.

W innych przeglądarkach (lub w Chrome bez plakietki) będzie widoczna ikona przeglądarki.

Powiadomienie z plakietką w przeglądarce Firefox na urządzeniu z Androidem.

Tak jak w przypadku opcji icon, nie ma konkretnych wytycznych dotyczących rozmiaru, którego należy użyć.

Zapoznaj się ze wskazówkami dotyczącymi Androida zalecany rozmiar to 24 piksele pomnożone przez współczynnik pikseli urządzenia.

Oznacza to, że obraz o wielkości co najmniej 72 piksele powinien być dobry (zakładając, że maksymalny współczynnik pikseli urządzenia to 3).

Obraz

Za pomocą opcji image można wyświetlić użytkownikowi większy obraz. Jest to szczególnie istotne przydatny do wyświetlania obrazu podglądu użytkownikowi.

const title = 'Image Notification';

const options = {
  image: '/images/demos/unsplash-farzad-nazifi-1600x1100.jpg',
};

registration.showNotification(title, options);

W Chrome w Linuksie powiadomienie będzie wyglądać tak:

Powiadomienie z obrazem w Chrome na Linuksa.

W Chrome na Androidzie przycinanie i proporcje są inne:

Powiadomienie z obrazem w Chrome na Androida.

Biorąc pod uwagę różnice w stosunku do wersji na komputery i urządzenia mobilne, niezwykle trudno jest to zasugerować. wytycznymi.

Ponieważ Chrome na komputer nie wypełnia dostępnej przestrzeni i ma współczynnik 4:3, może to być najlepszy wyświetlanie obrazu o tym współczynniku proporcji i pozwolenie Androidowi na jego przycięcie. Mając jednak na uwadze, opcja image może się jeszcze zmienić.

W przypadku Androida jedynym wytycznymi jest 450 dp.

Kierując się tą wskazówką, zalecamy zdjęcie o szerokości co najmniej 1350 pikseli.

Działania (przyciski)

Możesz określić, czy actions ma wyświetlać przyciski z powiadomieniem:

const title = 'Actions Notification';

const options = {
  actions: [
    {
      action: 'coffee-action',
      type: 'button',
      title: 'Coffee',
      icon: '/images/demos/action-1-128x128.png',
    },
    {
      action: 'doughnut-action',
      type: 'button',
      title: 'Doughnut',
      icon: '/images/demos/action-2-128x128.png',
    },
    {
      action: 'gramophone-action',
      type: 'button',
      title: 'Gramophone',
      icon: '/images/demos/action-3-128x128.png',
    },
    {
      action: 'atom-action',
      type: 'button',
      title: 'Atom',
      icon: '/images/demos/action-4-128x128.png',
    },
  ],
};

registration.showNotification(title, options);

Dla każdego działania można zdefiniować title, action (który jest zasadniczo identyfikatorem), icon oraz type. To, co będzie widoczne w powiadomieniu, to tytuł i ikona. Identyfikator jest używany przy wykrywaniu że kliknięto przycisk polecenia (więcej informacji na ten temat znajdziesz w następnej sekcji). Typ można pominąć, ponieważ 'button' jest wartością domyślną.

W chwili tworzenia tego tekstu działania pomocy dotyczące przeglądarek Chrome i Opera dla Androida były prawidłowe.

W powyższym przykładzie zdefiniowano 4 działania, które pokazują, że można zdefiniować więcej działań niż . Jeśli chcesz poznać liczbę działań wyświetlanych przez przeglądarkę, Sprawdź window.Notification?.maxActions:

const maxVisibleActions = window.Notification?.maxActions;

if (maxVisibleActions) {
  options.body = `Up to ${maxVisibleActions} notification actions can be displayed.`;
} else {
  options.body = 'Notification actions are not supported.';
}

Na komputerze ikony przycisków poleceń mają kolory (zobacz różowy pierścień):

Powiadomienie z przyciskami polecenia w Chrome na Linuksa.

W Androidzie 6 i starszych ikony są w kolorze zgodnym ze schematem kolorów systemu:

Powiadomienie z przyciskami polecenia w Chrome na Androida.

W Androidzie 7 i nowszych ikony działań w ogóle nie są wyświetlane.

Mam nadzieję, że Chrome zacznie działać na komputerach tak samo jak w Androidzie (tj. odpowiedni schemat kolorów, aby ikony pasowały do wyglądu i stylu systemu). Tymczasem możesz może dopasować kolor tekstu w Chrome, ustawiając ikony w kolorze #333333.

Warto też wspomnieć, że ikony wyglądają dobrze na Androidzie, ale nie na komputerze.

Najlepszy rozmiar reklamy do pracy w Chrome na komputery to 24 x 24 piksele. To smutne na Androidzie.

Oto sprawdzone metody, które możemy wykorzystać na podstawie tych różnic:

  • Stosuj spójny schemat kolorów ikon, aby przynajmniej wszystkie ikony były spójne wyświetlanych użytkownikowi.
  • Upewnij się, że działają w trybie monochromatycznym, ponieważ niektóre platformy mogą tak je wyświetlać.
  • Przetestuj rozmiar i zobacz, który Ci odpowiada. Rozmiar 128 × 128 pikseli dobrze sprawdza się na Androidzie, ale niezbyt dobrze jakości na komputerach.
  • Ikony działań powinny w ogóle nie być wyświetlane.

W specyfikacji powiadomień badamy sposób definiowania różnych rozmiarów ikon, ale wygląda na to, że że może minąć trochę czasu, zanim cokolwiek zostanie uzgodnione.

Działania (w tekście odpowiedzi)

Aby dodać odpowiedź w tekście do powiadomienia, zdefiniuj działanie za pomocą typu 'text':

const title = 'Alexey Rodionov';

const options = {
  body: 'How are you doing? )',
  image: '/images/demos/avatar-512x512.jpg',
  icon: '/images/demos/icon-512x512.png',
  badge: '/images/demos/badge-128x128.png',
  actions: [
    {
      action: 'reply',
      type: 'text',
      title: 'Reply',
      icon: '/images/demos/action-5-128x128.png',
    }
  ],
};

registration.showNotification(title, options);

Tak to będzie wyglądać w Androidzie:

Powiadomienie na Androidzie z przyciskiem polecenia odpowiedzi.

Kliknięcie przycisku polecenia otwiera pole do wprowadzania tekstu:

Powiadomienie na Androidzie z otwartym polem do wprowadzania tekstu.

Obiekt zastępczy pola do wprowadzania tekstu możesz dostosować:

const title = 'Alexey Rodionov';

const options = {
  body: 'How are you doing? )',
  icon: '/images/demos/avatar-512x512.jpg',
  badge: '/images/demos/badge-128x128.png',
  actions: [
    {
      action: 'reply',
      type: 'text',
      title: 'Reply',
      icon: '/images/demos/action-5-128x128.png',
      placeholder: 'Type text here',
    }
  ],
};

registration.showNotification(title, options);

Powiadomienie na Androidzie z dostosowanym obiektem zastępczym pola do wprowadzania tekstu.

W Chrome w systemie Windows pole wprowadzania tekstu jest zawsze widoczne bez konieczności klikania działania przycisk:

Powiadomienie w systemie Windows z polem do wprowadzania tekstu i przyciskiem polecenia odpowiedzi.

Możesz dodać więcej niż jedną odpowiedź w tekście lub połączyć przyciski i odpowiedzi w tekście:

const title = 'Poll';

const options = {
  body: 'Do you like this photo?',
  image: '/images/demos/cat-image.jpg',
  icon: '/images/demos/icon-512x512.png',
  badge: '/images/demos/badge-128x128.png',
  actions: [
    {
      action: 'yes',
      type: 'button',
      title: '👍 Yes',
    },
    {
      action: 'no',
      type: 'text',
      title: '👎 No (explain why)',
      placeholder: 'Type your explanation here',
    },
  ],
};

registration.showNotification(title, options);

Powiadomienie w systemie Windows z polem do wprowadzania tekstu i 2 przyciskami polecenia.

Kierunek

Parametr dir umożliwia określenie kierunku wyświetlania tekstu. od prawej do lewej lub od lewej do prawej.

Testy wykazały, że kierunek jest w dużej mierze określany przez tekst, a nie na . Zgodnie ze specyfikacją ma to sugerować przeglądarce wybór opcji układu ale nie widzę żadnej różnicy.

Prawdopodobnie najlepiej jest to określić, jeśli to możliwe. W przeciwnym razie przeglądarka powinna robić to, co trzeba, z podanego tekstu.

Parametr powinien być ustawiony na auto, ltr lub rtl.

Język pisany od prawej do lewej w Chrome w Linuksie wygląda tak:

Powiadomienia z językiem pisanym od prawej do lewej w Chrome na Linuksie.

W przeglądarce Firefox (najedź na nią kursorem myszy) zobaczysz następujący komunikat:

Powiadomienia z językiem pisanym od prawej do lewej w przeglądarce Firefox w systemie Linux.

Wibracje

Opcja wibracji pozwala zdefiniować wzór wibracji, który będzie uruchamiany po otrzymaniu powiadomienia jest wyświetlany, jeśli bieżące ustawienia użytkownika zezwalają na wibracje (tzn. urządzenie nie jest w tryb cichy).

Opcja wibracji powinna mieć postać tablicy liczb opisujących liczbę w milisekundach, po których ma wibrować urządzenie, oraz podaj jego liczbę nie wibracjami.

const title = 'Vibrate Notification';

const options = {
  // Star Wars shamelessly taken from the awesome Peter Beverloo
  // https://tests.peter.sh/notification-generator/
  vibrate: [
    500, 110, 500, 110, 450, 110, 200, 110, 170, 40, 450, 110, 200, 110, 170,
    40, 500,
  ],
};

registration.showNotification(title, options);

Dotyczy to tylko urządzeń obsługujących wibracje.

Dźwięk

Parametr sound pozwala zdefiniować dźwięk, który będzie odtwarzany po otrzymaniu powiadomienia.

Obecnie żadna przeglądarka nie obsługuje tej opcji.

const title = 'Sound Notification';

const options = {
  sound: '/demos/notification-examples/audio/notification-sound.mp3',
};

registration.showNotification(title, options);

Sygnatura czasowa

Sygnatura czasowa pozwala określić czas wystąpienia zdarzenia, które doprowadziło do przeniesienia wysyłanego powiadomienia.

Wartość timestamp powinna być liczbą milisekund od 00:00:00 czasu UTC, czyli 1 stycznia 1970 roku (jest to epoka UNIX).

const title = 'Timestamp Notification';

const options = {
  body: 'Timestamp is set to "01 Jan 2000 00:00:00".',
  timestamp: Date.parse('01 Jan 2000 00:00:00'),
};

registration.showNotification(title, options);

Sprawdzone metody na zapewnienie wygody użytkowania

Największy problem z UX, który zauważyłem w przypadku powiadomień, to brak precyzji w informacjach. które wyświetla się w powiadomieniu.

Przede wszystkim zastanów się, dlaczego wysłałeś wiadomość push, i upewnij się, że wszystkie są używane do pomagania użytkownikom w zrozumieniu, dlaczego czytają to powiadomienie.

Szczerze mówiąc, łatwo jest znaleźć przykłady i pomyśleć: „Nigdy nie popełnię tego błędu”. Ale to łatwiejsze. wpaść w pułapkę, niż mogłoby się wydawać.

Kilka typowych pułapek, których należy unikać:

  • Nie umieszczaj witryny w tytule ani w treści. Przeglądarki umieszczają Twoją domenę w sekcji powiadomienia, więc nie powielaj go.
  • Wykorzystaj wszystkie dostępne informacje. Jeśli wysyłasz wiadomość push, ponieważ ktoś użytkownik wysłał wiadomość do użytkownika zamiast tytułu „Nowa wiadomość” i treści „Kliknij tutaj, aby uzyskać przeczytaj go”. Użyj tytułu „Jan właśnie wysłał nową wiadomość” i ustaw treść powiadomienia na wiadomości.

Wykrywanie przeglądarek i funkcji

W momencie pisania tekstów Chrome i Firefox znacznie różnią się pod względem i obsługuje powiadomienia.

Na szczęście możesz wykryć obsługę funkcji powiadomień, patrząc na window.Notification i prototypem.

Załóżmy, że chcemy się dowiedzieć, czy powiadomienie obsługuje przyciski poleceń, dlatego wykonaj te czynności:

if ('actions' in window.Notification?.prototype) {
  // Action buttons are supported.
} else {
  // Action buttons are NOT supported.
}

Dzięki temu możemy zmienić powiadomienie wyświetlane użytkownikom.

W przypadku pozostałych opcji wykonaj te same czynności, co powyżej, zastępując 'actions' odpowiednimi wartościami nazwę parametru.

Co dalej

Ćwiczenia z kodowania