Benachrichtigung über Toast (Windows Store App)

Meine neue WebSite finden Du jetzt unter https://AttilaKrick.com.

Interessant: „Popupbenachrichtigungen“ auf http://goo.gl/enhq4

Ein Toast oder auch Popup ist eine Benachrichtigungs-Streifen in der rechten oberen Ecke. Toast bietet die Möglichkeit zeitkritische Informationen anzuzeigen und mit einem Tap bzw. Klick in die Anwendung zu kommen. Ein Toast ist die einzige Art mit Benutzer zu interagieren, wenn die App nicht Vordergrund ist. Diese Form eignet sich besonders gut für lokal-, zeit- und push-gesteuerte Benachrichtigung.

Beispiel-Szenarios für Tost’s könnten sein:

Eine Musik App zeigt beim Liedwechsel den neuen Titel an.

Ein Kalender zeigt eine Erinnerung für einen bevorstehenden Termin.

Die Shopping App informiert über Preisänderung eines beobachteten Artikels.

Die Messaging App zeigt eine neue eingehende Nachricht für IM, Email, SMS, VoIP, News oder der gleichen an.

Wichtig: Ein Update sollte nicht nur dann erfolgen wenn der User gerade Ihrer App nutzt sonder auch außerhalb dieser Zeit. Wenn Ihre App jedoch beendet oder suspended ist, können Sie Update nur über Hintergrundaufgaben ausführen. Werfen Sei dazu einen Blick in das Kapitel Hintergrundaufgaben

Toast sind als Einladung zusehen, um zu einem bestimmten Ziel / Zeitpunkt in der App geführt zu werden.

Vorlagen: Toast können Text, Bild und Audio-Botschaften enthalten die jedoch reglementiert sind. Eine Vorlage kann über die Methode ToastNotificationManager.GetTemplateContent bezogen werden. Diese erwartet eine Enumeration von ToastTemplateType.
Eine Vorschau aller möglichen Vorlagen finden Sie unter http://goo.gl/d5nvc sowie die Vorgaben von Maßen im XML-Schema unter http://goo.gl/6ePnJ

App-Manifest Um Toast auslösen zu können müssen Sie diese im package.appxmanifest deklariert:

<VisualElements ... ToastCapable="true">

Die Anzeigedauer eines Toast wird vom System vorgegeben und besteht aus short für eine Standard-Dauer oder long mit 25 Sekunden:

var vorlage = ToastTemplateType.ToastImageAndText02;
var toast = ToastNotificationManager.GetTemplateContent(vorlage);
var root = toast.DocumentElement;
root.SetAttribute("duration", "long");

Denken Sie daran optionale Startparameter festzulegen. Diese werden beim Klick auf die Toast-Benachrichtigung, an Ihre App übergeben.

var vorlage = ToastTemplateType.ToastImageAndText02;
var toast = ToastNotificationManager.GetTemplateContent(vorlage);
var root = toast.DocumentElement;
string launch = "{\"type\":\"sofortToast\",\"param1\":\"12345\",\"param2\":\"67890\"}";
root.SetAttribute("launch", launch);

Das optionale Bild, das Sie in einem Toast verwenden, muss 150x150px abmessen und darf nicht größer als 200 KB sein:

var vorlage = ToastTemplateType.ToastImageAndText02;
var toast = ToastNotificationManager.GetTemplateContent(vorlage);
var root = toast.DocumentElement;
var image = root.GetElementsByTagName("image");
((XmlElement)image[0]).SetAttribute("src", "ms-appx:///Buch/Beispiele/_Tile.jpg");
((XmlElement)image[0]).SetAttribute("alt", "Wasser fließt durch einen Bambus auf einen Stein");

Wann: Wenn Sie Toast’s an das System senden, so können Sie dies sofort, geplant oder geplant mit Intervall tun.

? Fangen Sie Push-Toast’s mit dem PushNotificationReceived-Ereignis ab, wenn die App ausgeführt wird.

? Eine Toast-Benachrichtigung kann auch von einer klassischen Desktop-Anwendung gesendet. Mehr dazu unter http://goo.gl/qhaHy.

? Berücksichtigen Sie das andere aktive Apps Toast-Benachrichtigungen ausblenden können.

? Dieses Thema ist stark verflochten mit Hintergrundaufgaben (s. Seite 200 ff.) da in der Regel Aktualisierungen im Hintergrund ausgeführt werden.

? Um über WNS Push-Benachrichtigungen zu senden lesen Sie bitte auch folgende Richtlinien unter http://goo.gl/6fV8Z.

Tips

Fassen Sie mehrere zusammenhängende Updates, die innerhalb kurzer Zeit anfallen, zu einem einzigen Toast zusammen.

Präsentieren Sie Informationen so einfach wie möglich.

Fügen Sie Bilder ein, wenn diese den Inhalt der Nachricht verdeutlichen, sonst besser nicht.

No Go

Verwenden Sie Toast’s nicht für wichtige Infos die nicht übersehen werden dürfen. Besser hierfür wären Flyout’s, Dialogfelder, die AppBar oder ein anderes Inline-Element.

Verzichten Sie auf Formulierungen wie „Klicken Sie hier, …“.

Verwenden Sie Toast’s nicht für sehr häufig (z.B. Aktien) anfallende Benachrichtigungen.

Verwenden Sie keine Toast’s, wenn die App im Vordergrund ist. Besser hierfür wären Flyout’s, Dialogfelder, die AppBar oder ein anderes Inline-Element.

Fügen Sie im Bildfeld einer Toast keine generischen Bilder wie Symbole oder das App-Logo ein.

Troubleshooting

Sollte Ihre Toast-Benachrichtigung nicht angezeigt werden überprüfen Sie folgende Punkte:

Überprüfen der Benutzereinstellungen

Überprüfen der Einträge im App-Manifest

Überprüfen der Bildgrößen

Untersuchen der Bildformate

Überprüfen der URLs

Überprüfen der XML-Syntax

Überprüfen der Ablaufzeit der Benachrichtigung

Lösungsansätze finden Sie auch in dem Artikel „Richtlinien und Prüfliste für Popup-Benachrichtigungen“, im Bereich „Problembehandlung“ unter http://goo.gl/NDdht

Eine einfache Toast-Nachricht anzeigen

var vorlage = ToastTemplateType.ToastText01;
var toast = ToastNotificationManager.GetTemplateContent(vorlage);

var text = toast.GetElementsByTagName("text");
text[0].AppendChild(toast.CreateTextNode("Geröstetes Brot (Toast) "
    + "wurde früher in gefüllte Trinkgläser getaucht."));

var notification = new ToastNotification(toast);
var notifier = ToastNotificationManager.CreateToastNotifier();
notifier.Show(notification);

Eine komplexe Toast-Nachricht anzeigen

var vorlage = ToastTemplateType.ToastImageAndText02;
var toast = ToastNotificationManager.GetTemplateContent(vorlage);

var root = toast.DocumentElement;
root.SetAttribute("duration", "long"); // 25 Se. Dauer

// + Parameter für den Wiedereinstieg in die App nützlich
string launch = "{\"type\":\"sofortToast\",\"param1\":\"12345\",\"param2\":\"67890\"}";
root.SetAttribute("launch", launch);

// + Text
var text = root.GetElementsByTagName("text");
text[0].AppendChild(toast.CreateTextNode("Guten Morgen"));
text[1].AppendChild(toast.CreateTextNode("Ich bin ein Toast mit einer Nachricht."));

// + Bild
var image = root.GetElementsByTagName("image");
((XmlElement)image[0]).SetAttribute("src", "ms-appx:///Buch/Beispiele/_Tile.jpg");
((XmlElement)image[0]).SetAttribute("alt", "Wasser fließt durch einen Bambus auf einen Stein");

// + Audio
var audio = toast.CreateElement("audio");
root.AppendChild(audio);
audio.SetAttribute("loop", "true");
audio.SetAttribute("src", "ms-winsoundevent:Notification.Looping.Alarm2");

var notifier = ToastNotificationManager.CreateToastNotifier();

// Sofortige Anzeige
var sofortToast = new ToastNotification(toast);
notifier.Show(sofortToast);

// ODER als geplant Anzeige
var startzeitA = DateTime.Now.AddSeconds(5);
var geplanterToast = new ScheduledToastNotification(toast, startzeitA);
notifier.AddToSchedule(geplanterToast);

// ODER als intervall Anzeigen
var startzeitB = DateTime.Now.AddSeconds(10);
var intervallToastB = new ScheduledToastNotification(
    content: toast,
    deliveryTime: startzeitB,
    snoozeInterval: new TimeSpan(0, 0, 60),
    maximumSnoozeCount: 3);
notifier.AddToSchedule(intervallToastB);