Freigeben über


Verfolgbare Kachelbenachrichtigungen

Hinweis

Live-Kacheln sind ein Windows 10-Feature, das in späteren Versionen von Windows nicht unterstützt wird. Für neue Apps wird empfohlen, die aktuellen Anleitungen für App-Symbole zu befolgen.

Mit den verfolgbaren Kachelbenachrichtigungen können Sie feststellen, welche Kachelbenachrichtigungen die Live-Kachel Ihrer App angezeigt hat, als der Benutzer auf die Kachel geklickt hat. Beispielsweise könnte eine Nachrichten-App dieses Feature verwenden, um zu bestimmen, welche News-Story ihre Live-Kachel angezeigt wurde, als der Benutzer sie gestartet hat. Es könnte sicherstellen, dass die Story an prominenter Stelle angezeigt wird, so dass der Benutzer sie finden kann.

Wichtig

Erfordert Anniversary Update: Um Verfolgbare Kachelbenachrichtigungen mit C#-, C++ oder VB-basierten UWP-Apps zu verwenden, müssen Sie SDK 14393 als Ziel verwenden und Build 14393 oder höher ausführen.

Wichtige APIs: LaunchActivatedEventArgs.TileActivatedInfo-Eigenschaft, TileActivatedInfo-Klasse

Funktionsweise

Um verfolgbare Kachelbenachrichtigungen zu aktivieren, verwenden Sie die Eigenschaft Argumente in der Payload der Kachelbenachrichtigung, ähnlich wie die Starteigenschaft in der Payload der Popupbenachrichtigung, um Informationen über den Inhalt in die Kachelbenachrichtigung einzubetten.

Wenn Ihre App über die Live-Kachel gestartet wird, gibt das System eine Liste von Argumenten aus den aktuellen/zuletzt angezeigten Kachelbenachrichtigungen zurück.

Wann sollten verfolgbare Kachelbenachrichtigungen verwendet werden?

Verfolgbare Kachelbenachrichtigungen werden in der Regel verwendet, wenn Sie die Benachrichtigungswarteschlange auf Ihrer Live Tile verwenden (d. h., Sie durchlaufen bis zu 5 verschiedene Benachrichtigungen). Sie sind auch nützlich, wenn die Inhalte auf Ihrer Live Tile möglicherweise nicht mehr mit den neuesten Inhalten in der App synchronisiert sind. Beispielsweise aktualisiert die News-App ihre Live-Kachel alle 30 Minuten, aber wenn die App gestartet wird, lädt sie die neuesten Nachrichten (was möglicherweise keine Elemente enthält, die sich im letzten Abrufintervall auf der Kachel befanden). In diesem Fall kann der Benutzer frustriert sein, dass er die Geschichte, die er auf seiner Live-Kachel gesehen hat, nicht finden kann. Hier können verfolgbare Kachelbenachrichtigungen helfen, indem sie sicherstellen, dass das, was der Benutzer auf seiner Kachel gesehen hat, leicht auffindbar ist.

Was mit einer verfolgbaren Kachelbenachrichtigung zu tun ist

Das Wichtigste ist, dass Sie in den meisten Szenarien NICHT direkt zu der spezifischen Benachrichtigung navigieren sollten, die sich auf der Kachel befand, als der Benutzer darauf geklickt hat. Ihre Live-Kachel wird als Einstiegspunkt für Ihre Anwendung verwendet. Es kann zwei Szenarien geben, in denen ein Benutzer auf die Live-Kachel klickt: (1) er wollte die App normal starten, oder (2) er wollte weitere Informationen zu einer bestimmten Benachrichtigung anzeigen, die sich auf der Live-Kachel befand. Da es für den Benutzer keine Möglichkeit gibt, explizit zu sagen, welches Verhalten sie wünschen, besteht die ideale Erfahrung darin, Ihre App normal zu starten und gleichzeitig sicherzustellen, dass die Benachrichtigung, die der Benutzer gesehen hat, leicht auffindbar ist.

Wenn Sie z. B. auf die Live-Kachel der MSN News-App klicken, wird die App normal gestartet: Sie zeigt die Startseite an oder den Artikel, den der Benutzer zuvor gelesen hat. Auf der Startseite stellt die App jedoch sicher, dass der Artikel aus der Live-Kachel leicht auffindbar ist. Auf diese Weise werden beide Szenarien unterstützt: das Szenario, in dem Sie die App einfach starten/fortsetzen möchten und das Szenario, in dem Sie die spezifische Story anzeigen möchten.

So fügen Sie die Arguments-Eigenschaft in die Payload Ihrer Kachelbenachrichtigung ein

In einer Benachrichtigungs-Payload ermöglicht die Argumenteigenschaft Ihrer App die Bereitstellung von Daten, die Sie später zur Identifizierung der Benachrichtigung verwenden können. Ihre Argumente können z. B. die ID der Story enthalten, so dass Sie beim Start die Story abrufen und anzeigen können. Die Eigenschaft akzeptiert eine Zeichenkette, die nach Belieben serialisiert werden kann (Query-String, JSON usw.). Wir empfehlen jedoch in der Regel das Query-String-Format, da es leichtgewichtig ist und sich gut in XML kodieren lässt.

Die Eigenschaft kann sowohl für die TileVisual- als auch für die TileBinding-Elemente festgelegt werden und wird kaskadenartig nach unten weitergegeben. Wenn Sie dieselben Argumente für jede Kachelgröße benötigen, legen Sie einfach die Argumente für TileVisual fest. Wenn Sie bestimmte Argumente für bestimmte Kachelgrößen benötigen, können Sie die Argumente für einzelne TileBinding-Elemente festlegen.

In diesem Beispiel wird eine Benachrichtigungs-Payload erstellt, die die Argumenteigenschaft verwendet, damit die Benachrichtigung später identifiziert werden kann.

// Uses the following NuGet packages
// - Microsoft.Toolkit.Uwp.Notifications
// - QueryString.NET
 
TileContent content = new TileContent()
{
    Visual = new TileVisual()
    {
        // These arguments cascade down to Medium and Wide
        Arguments = new QueryString()
        {
            { "action", "storyClicked" },
            { "story", "201c9b1" }
        }.ToString(),
 
 
        // Medium tile
        TileMedium = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                // Omitted
            }
        },
 
 
        // Wide tile is same as Medium
        TileWide = new TileBinding() { /* Omitted */ },
 
 
        // Large tile is an aggregate of multiple stories
        // and therefore needs different arguments
        TileLarge = new TileBinding()
        {
            Arguments = new QueryString()
            {
                { "action", "storiesClicked" },
                { "story", "43f939ag" },
                { "story", "201c9b1" },
                { "story", "d9481ca" }
            }.ToString(),
 
            Content = new TileBindingContentAdaptive() { /* Omitted */ }
        }
    }
};

So überprüfen Sie beim Starten der App nach der Argumenteigenschaft

Die meisten Apps verfügen über eine Datei „App.xaml.cs“, die eine Außerkraftsetzung für die OnLaunched-Methode enthält. Wie der Name schon sagt, ruft Ihre App diese Methode beim Starten auf. Sie verwendet ein einzelnes Argument, ein LaunchActivatedEventArgs-Objekt.

Das LaunchActivatedEventArgs-Objekt verfügt über eine Eigenschaft, die verfolgbare Benachrichtigungen ermöglicht: die TileActivatedInfo-Eigenschaft, die Zugriff auf ein TileActivatedInfo-Objekt ermöglicht. Wenn der Benutzer Ihre App über die Kachel startet (anstelle der App-Liste, der Suche oder eines anderen Einstiegspunkts), initialisiert die App diese Eigenschaft.

Das TileActivatedInfo-Objekt enthält eine Eigenschaft namens RecentlyShownNotifications, die eine Liste der Benachrichtigungen enthält, die innerhalb der letzten 15 Minuten auf der Kachel angezeigt wurden. Das erste Element in der Liste stellt die Benachrichtigung dar, die sich derzeit auf der Kachel befindet und die nachfolgenden Elemente stellen die Benachrichtigungen dar, die der Benutzer vor dem aktuellen Element gesehen hat. Wenn die Kachel gelöscht wurde, ist diese Liste leer.

Jede ShownTileNotification verfügt über eine Arguments-Eigenschaft. Die Arguments-Eigenschaft wird mit der Arguments-Zeichenkette aus der Payload der Kachelbenachrichtigung oder mit null initialisiert, wenn ihre Payload keine Argumente-Zeichenkette enthält.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // If the API is present (doesn't exist on 10240 and 10586)
    if (ApiInformation.IsPropertyPresent(typeof(LaunchActivatedEventArgs).FullName, nameof(LaunchActivatedEventArgs.TileActivatedInfo)))
    {
        // If clicked on from tile
        if (args.TileActivatedInfo != null)
        {
            // If tile notification(s) were present
            if (args.TileActivatedInfo.RecentlyShownNotifications.Count > 0)
            {
                // Get arguments from the notifications that were recently displayed
                string[] allArgs = args.TileActivatedInfo.RecentlyShownNotifications
                .Select(i => i.Arguments)
                .ToArray();
 
                // TODO: Highlight each story in the app
            }
        }
    }
 
    // TODO: Initialize app
}

Zugreifen auf OnLaunched aus Desktopanwendungen

Desktop-Apps (z. B. WPF usw.), die die Desktop-Brücke verwenden, können ebenfalls verfolgbare Kacheln verwenden! Der einzige Unterschied besteht im Zugriff auf die OnLaunched-Argumente. Beachten Sie, dass Sie Ihre App zuerst mit der Desktop-Brücke verpacken müssen.

Wichtig

Erfordert Update im Oktober 2018: Um die AppInstance.GetActivatedEventArgs()-API verwenden zu können, müssen Sie SDK 17763 verwenden und mit Build 17763 oder höher arbeiten.

Gehen Sie für Desktopanwendungen wie folgt vor, um auf die Startargumente zuzugreifen...


static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // API only available on build 17763 or later
    var args = AppInstance.GetActivatedEventArgs();
    switch (args.Kind)
    {
        case ActivationKind.Launch:

            var launchArgs = args as LaunchActivatedEventArgs;

            // If clicked on from tile
            if (launchArgs.TileActivatedInfo != null)
            {
                // If tile notification(s) were present
                if (launchArgs.TileActivatedInfo.RecentlyShownNotifications.Count > 0)
                {
                    // Get arguments from the notifications that were recently displayed
                    string[] allTileArgs = launchArgs.TileActivatedInfo.RecentlyShownNotifications
                    .Select(i => i.Arguments)
                    .ToArray();
     
                    // TODO: Highlight each story in the app
                }
            }

            break;

Beispiel für unformatiertes XML

Wenn Sie unformatierte XML anstelle der Benachrichtigungsbibliothek verwenden, finden Sie hier den XML-Code.

<tile>
  <visual arguments="action=storyClicked&amp;story=201c9b1">
 
    <binding template="TileMedium">
       
      <text>Kitten learns how to drive a car...</text>
      ... (omitted)
     
    </binding>
 
    <binding template="TileWide">
      ... (same as Medium)
    </binding>
     
    <!--Large tile is an aggregate of multiple stories-->
    <binding
      template="TileLarge"
      arguments="action=storiesClicked&amp;story=43f939ag&amp;story=201c9b1&amp;story=d9481ca">
   
      <text>Can your dog understand what you're saying?</text>
      ... (another story)
      ... (one more story)
   
    </binding>
 
  </visual>
</tile>