Anzeigen einer Benachrichtigung

Die Benachrichtigungsoptionen sind in zwei Abschnitte unterteilt. In einem Abschnitt geht es um die visuellen Aspekte (dieser Abschnitt) und in einem Abschnitt zur Erläuterung der Verhaltensaspekte von Benachrichtigungen (nächster Abschnitt).

Sie können mit dem Benachrichtigungsgenerator von Peter Beverloo in verschiedenen Browsern auf verschiedenen Plattformen verschiedene Benachrichtigungsoptionen ausprobieren.

Visuelle Optionen

Die API zum Anzeigen einer Benachrichtigung ist einfach:

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

Die Argumente title und options sind optional.

Der Titel ist ein String und es gibt folgende Optionen:

{
  "//": "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>",
}

Sehen wir uns die visuellen Optionen an:

Dissektion der Benutzeroberfläche einer Benachrichtigung

Optionen für Titel und Text

So sieht eine Benachrichtigung ohne Titel und Optionen in Chrome unter Windows aus:

Benachrichtigung ohne Titel und Optionen in Chrome unter Windows.

Wie Sie sehen, wird der Browsername als Titel und der Platzhalter „Neue Benachrichtigung“ als Benachrichtigungstext verwendet.

Wenn eine progressive Webanwendung auf dem Gerät installiert ist, wird anstelle des Browsernamens der Name der Web-App verwendet:

Benachrichtigung mit dem Namen der Web-App anstelle des Browsernamens.

Angenommen, wir hätten den folgenden Code ausgeführt:

const title = 'Simple Title';

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

registration.showNotification(title, options);

würden wir in Chrome unter Linux folgende Benachrichtigung erhalten:

Benachrichtigung mit Titel und Text in Chrome unter Linux.

In Firefox unter Linux würde das so aussehen:

Benachrichtigung mit Titel und Text in Firefox unter Linux.

So sieht die Benachrichtigung mit viel Text im Titel und Text in Chrome unter Linux aus:

Benachrichtigung mit langem Titel und Text in Chrome unter Linux.

Firefox unter Linux blendet den Textkörper ein, bis Sie den Mauszeiger auf die Benachrichtigung bewegen. Dadurch wird die Benachrichtigung maximiert:

Benachrichtigung mit langem Titel und Text in Firefox unter Linux.

Benachrichtigung mit langem Titel und Text in Firefox unter Linux, während die Maus mit dem Mauszeiger über die Benachrichtigung bewegt wird

Dieselben Benachrichtigungen in Firefox unter Windows sehen so aus:

Benachrichtigung mit Titel und Text in Firefox unter Windows.

Benachrichtigung mit langem Titel und Text in Firefox unter Windows.

Wie Sie sehen, kann dieselbe Benachrichtigung in verschiedenen Browsern unterschiedlich aussehen. Sie kann im selben Browser auf verschiedenen Plattformen auch unterschiedlich aussehen.

Chrome und Firefox verwenden die Systembenachrichtigungen und das Benachrichtigungscenter auf Plattformen, auf denen diese verfügbar sind.

Beispielsweise unterstützen Systembenachrichtigungen unter macOS keine Bilder und Aktionen (Schaltflächen und Inline-Antworten).

Chrome bietet auch benutzerdefinierte Benachrichtigungen für alle Desktop-Plattformen. Sie können sie aktivieren, indem Sie das Flag chrome://flags/#enable-system-notifications auf den Status Disabled setzen.

Icon

Die Option icon ist im Wesentlichen ein kleines Bild, das neben dem Titel und Textkörper angezeigt werden kann.

Sie müssen in Ihrem Code eine URL zu dem Bild angeben, das Sie laden möchten:

const title = 'Icon Notification';

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

registration.showNotification(title, options);

In Chrome unter Linux erhalten Sie diese Benachrichtigung:

Benachrichtigung mit Symbol in Chrome unter Linux.

und in Firefox unter Linux:

Benachrichtigung mit Symbol in Firefox unter Linux.

Leider gibt es keine soliden Richtlinien für die Bildgröße für ein Symbol.

Android scheint ein Bild mit einer Auflösung von 64 dp zu verlangen (das 64-Pixel-Vielfache geteilt durch das Pixel-Verhältnis des Geräts).

Wenn das höchste Pixelverhältnis für ein Gerät 3 beträgt, ist eine Symbolgröße von 192 Pixeln oder mehr sicher.

Badge

Das badge ist ein kleines monochromes Symbol, mit dem dem Nutzer weitere Informationen darüber angezeigt werden, woher die Benachrichtigung stammt:

const title = 'Badge Notification';

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

registration.showNotification(title, options);

Zum Zeitpunkt der Erstellung dieses Dokuments wurde das Logo nur in Chrome unter Android verwendet.

Benachrichtigung mit Symbol in Chrome unter Android.

Bei anderen Browsern (oder Chrome ohne Symbol) sehen Sie ein Browsersymbol.

Benachrichtigung mit Symbol in Firefox für Android.

Wie bei der Option icon gibt es auch bei der Verwendung keine echten Vorgaben.

In den Android-Richtlinien wird als Größe 24 Pixel multipliziert mit dem Pixelverhältnis des Geräts empfohlen.

Ein Bild mit mindestens 72 Pixeln sollte also gut sein (bei einem maximalen Geräte-Pixel-Verhältnis von 3).

Bild

Die Option image kann verwendet werden, um dem Nutzer ein größeres Bild anzuzeigen. Dies ist besonders nützlich, um Nutzern ein Vorschaubild anzuzeigen.

const title = 'Image Notification';

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

registration.showNotification(title, options);

In Chrome unter Linux sieht die Benachrichtigung so aus:

Benachrichtigung mit Bild in Chrome unter Linux.

In Chrome unter Android unterscheiden sich der Zuschnitt und das Seitenverhältnis:

Benachrichtigung mit Bild in Chrome unter Android.

Angesichts des unterschiedlichen Verhältnisses zwischen Computern und Mobilgeräten ist es äußerst schwierig, Richtlinien vorzuschlagen.

Da Chrome auf Desktop-Computern nicht den verfügbaren Platz ausfüllt und ein Verhältnis von 4:3 hat, empfiehlt es sich, ein Bild mit diesem Seitenverhältnis bereitzustellen und es Android zu erlauben, das Bild zuzuschneiden. Die Option image kann sich jedoch noch ändern.

Unter Android ist die einzige Richtlinie eine Breite von 450 dp.

Ein Bild mit einer Breite von mindestens 1.350 Pixeln ist empfehlenswert.

Aktionen (Schaltflächen)

Sie können actions so definieren, dass Schaltflächen mit einer Benachrichtigung angezeigt werden:

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);

Für jede Aktion kannst du eine title, eine action (die im Wesentlichen eine ID ist), eine icon und eine type definieren. Den Titel und das Symbol sehen Sie in der Benachrichtigung. Die ID wird verwendet, wenn erkannt wird, dass auf die Aktionsschaltfläche geklickt wurde (mehr dazu im nächsten Abschnitt). Der Typ kann weggelassen werden, da 'button' der Standardwert ist.

Zum Zeitpunkt der Erstellung dieses Artikels werden nur Supportaktionen für Chrome und Opera für Android unterstützt.

Im Beispiel oben sind vier Aktionen definiert, die zeigen, dass Sie mehr Aktionen definieren können, als angezeigt werden. Wenn Sie wissen möchten, wie viele Aktionen vom Browser angezeigt werden, können Sie window.Notification?.maxActions prüfen:

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.';
}

Auf dem Desktop werden die Symbole der Aktionsschaltflächen in Farbe angezeigt (siehe rosa Ring):

Benachrichtigung mit Aktionsschaltflächen in Chrome unter Linux.

Unter Android 6 und niedriger werden die Symbole eingefärbt, damit sie dem Farbschema des Systems entsprechen:

Benachrichtigung mit Aktionsschaltflächen in Chrome für Android.

Unter Android 7 und höher werden die Aktionssymbole überhaupt nicht angezeigt.

Das Verhalten auf Computern wird hoffentlich an Android angepasst (d.h. es wird das entsprechende Farbschema angewendet, damit die Symbole dem Erscheinungsbild des Systems entsprechen). In der Zwischenzeit können Sie die Textfarbe von Chrome anpassen, indem Sie für Ihre Symbole die Farbe #333333 festlegen.

Erwähnen Sie auch, dass Symbole auf Android-Geräten scharf aussehen, auf Desktops jedoch nicht.

Die beste Größe für Chrome bei der Arbeit war 24 x 24 Pixel. Das sieht leider fehl am Platz aus.

Die Best Practice, die wir aus diesen Unterschieden ziehen können:

  • Verwende für deine Symbole ein einheitliches Farbschema, damit den Nutzern zumindest alle Symbole einheitlich angezeigt werden.
  • Stellen Sie sicher, dass sie in monochromer Schrift funktionieren, da sie auf einigen Plattformen möglicherweise so angezeigt werden.
  • Testen Sie die Größe und finden Sie heraus, was für Sie am besten funktioniert. Die Auflösung von 128 × 128 Pixel funktioniert auf Android gut, auf Desktop-Computern aber schlechter.
  • Ihre Aktionssymbole werden überhaupt nicht angezeigt.

In der Notification-Spezifikation wird eine Möglichkeit untersucht, mehrere Größen von Symbolen zu definieren. Es scheint jedoch einige Zeit zu dauern, bis etwas vereinbart wird.

Aktionen (Inline-Antworten)

Du kannst eine Inline-Antwort auf die Benachrichtigung hinzufügen, indem du eine Aktion mit dem Typ 'text' definierst:

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);

So sieht das auf Android-Geräten aus:

Benachrichtigung auf Android-Geräten mit einer Aktionsschaltfläche „Antworten“.

Durch Klicken auf die Aktionsschaltfläche wird ein Texteingabefeld geöffnet:

Benachrichtigung auf Android-Geräten mit geöffnetem Texteingabefeld.

Sie können den Platzhalter für das Texteingabefeld anpassen:

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);

Benachrichtigung unter Android mit angepasstem Platzhalter für Texteingabefeld.

In Chrome unter Windows ist das Texteingabefeld immer sichtbar, ohne dass Sie auf die Aktionsschaltfläche klicken müssen:

Benachrichtigung unter Windows mit einem Texteingabefeld und einer Aktionsschaltfläche „Antworten“.

Sie können mehrere Inline-Antworten hinzufügen oder Schaltflächen und Inline-Antworten kombinieren:

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);

Benachrichtigung unter Windows mit einem Texteingabefeld und zwei Aktionsschaltflächen.

Richtung

Mit dem Parameter dir können Sie festlegen, in welcher Richtung der Text angezeigt werden soll: von rechts nach links oder von links nach rechts.

Beim Testen schien es, dass die Richtung hauptsächlich durch den Text und nicht durch diesen Parameter bestimmt wurde. Laut Spezifikation soll dies dem Browser vorschlagen, wie Optionen wie Aktionen angeordnet werden sollen, aber ich habe keinen Unterschied gesehen.

Am besten definieren Sie, wenn möglich. Andernfalls führt der Browser gemäß dem bereitgestellten Text alles richtig aus.

Der Parameter sollte auf auto, ltr oder rtl festgelegt sein.

Eine linksläufige Sprache, die in Chrome unter Linux verwendet wird, sieht so aus:

Benachrichtigung mit linksläufiger Sprache in Chrome unter Linux.

In Firefox sehen Sie Folgendes:

Benachrichtigung mit linksläufiger Sprache in Firefox unter Linux.

Vibrieren

Mit der Vibrationsoption können Sie ein Vibrationsmuster definieren, das angewendet wird, wenn eine Benachrichtigung angezeigt wird. Dabei wird vorausgesetzt, dass die aktuellen Einstellungen des Nutzers Vibrationen zulassen (d. h. das Gerät ist nicht im Lautlos-Modus).

Das Format der Vibrationsoption sollte aus einem Zahlenarray bestehen, das die Anzahl der Millisekunden angibt, die das Gerät vibrieren soll, gefolgt von der Anzahl der Millisekunden, die das Gerät nicht vibrieren soll.

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);

Dies betrifft nur Geräte, die die Vibration unterstützen.

Ton

Mit dem Parameter "ton" können Sie einen Ton definieren, der abgespielt werden soll, wenn die Benachrichtigung eingeht.

Zum Zeitpunkt der Erstellung dieses Dokuments wird diese Option von keinem Browser unterstützt.

const title = 'Sound Notification';

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

registration.showNotification(title, options);

Zeitstempel

Mit dem Zeitstempel können Sie der Plattform mitteilen, wann ein Ereignis aufgetreten ist, das zum Senden der Push-Benachrichtigung geführt hat.

timestamp sollte die Anzahl der Millisekunden seit 00:00:00 UTC sein, also dem 1. Januar 1970 (UNIX-Epoche).

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);

Best Practices für die Nutzererfahrung

Der größte UX-Fehler, den ich bei Benachrichtigungen festgestellt habe, sind die mangelnden Spezifität der Informationen, die in einer Benachrichtigung angezeigt werden.

Sie sollten überlegen, warum Sie die Push-Nachricht überhaupt gesendet haben, und darauf achten, dass alle Benachrichtigungsoptionen verwendet werden, damit die Nutzer verstehen, warum sie die Benachrichtigung lesen.

Ehrlich gesagt ist es leicht, Beispiele zu sehen und denken: „Diesen Fehler mache ich nie“. Aber in diese Falle gefallen, als Sie denken.

Einige häufige Fallstricke, die Sie vermeiden sollten:

  • Fügen Sie Ihre Website nicht in den Titel oder den Text ein. Browser fügen Ihre Domain in die Benachrichtigung ein, sodass Sie sie nicht duplizieren.
  • Verwenden Sie alle Informationen, die Ihnen zur Verfügung stehen. Wenn Sie eine Push-Nachricht senden, weil jemand eine Nachricht an einen Nutzer gesendet hat, verwenden Sie nicht den Titel "Neue Nachricht" und den Text "Zum Lesen hier klicken". Verwenden Sie den Titel "John hat gerade eine neue Nachricht gesendet" und legen Sie den Text der Benachrichtigung als Teil der Nachricht fest.

Browser und Funktionserkennung

Zum Zeitpunkt der Entstehung dieses Artikels gab es große Unterschiede zwischen Chrome und Firefox, was die Unterstützung von Funktionen für Benachrichtigungen betrifft.

Glücklicherweise erkennen Sie die Unterstützung von Benachrichtigungsfunktionen, indem Sie sich den window.Notification-Prototyp ansehen.

Wenn wir wissen möchten, ob eine Benachrichtigung Aktionsschaltflächen unterstützt, würden wir so vorgehen:

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

Damit könnten wir die Benachrichtigung ändern, die unseren Nutzern angezeigt wird.

Führen Sie mit den anderen Optionen die oben genannten Schritte aus und ersetzen Sie dabei 'actions' durch den gewünschten Parameternamen.

Weitere Informationen

Code-Labs