Verfolgbare KachelbenachrichtigungenChaseable tile notifications

Mit einer beschreibbaren Kachel Benachrichtigung können Sie feststellen, welche Kachel Benachrichtigungen von der Live-Kachel ihrer App angezeigt wurden, als der Benutzer auf die Kachel geklickt hat.Chaseable tile notifications let you determine which tile notifications your app's Live Tile was displaying when the user clicked the tile.
Beispielsweise könnte eine News-App dieses Feature verwenden, um zu bestimmen, welche Nachrichten Story die Live-Kachel beim Starten des Benutzers anzeigt hat. Dadurch kann sichergestellt werden, dass die Story hervorgehoben wird, damit der Benutzer Sie finden kann.For example, a news app could use this feature to determine which news story the its Live Tile was displaying when the user launched it; it could that ensure that the story is prominently displayed so that the user can find it.

Wichtig

Das Anniversary Update ist erforderlich: zur Verwendung von Verlaufs fähigen Kachel Benachrichtigungen mit c#-, C++-oder VB-basierten UWP-apps müssen Sie das SDK 14393 als Ziel verwenden und Build 14393 oder höher ausführen.Requires Anniversary Update: To use chaseable tile notifications with C#, C++, or VB-based UWP apps, you must target SDK 14393 and be running build 14393 or higher. Bei JavaScript-basierten UWP-apps müssen Sie auf SDK 17134 abzielen und Build 17134 oder höher ausführen.For JavaScript-based UWP apps, you must target SDK 17134 and be running build 17134 or higher.

Wichtige APIs: launchactivatedeventargs. tileactivatedinfo-Eigenschaft, tileactivatedinfo-KlasseImportant APIs: LaunchActivatedEventArgs.TileActivatedInfo property, TileActivatedInfo class

FunktionsweiseHow it works

Um chaseable-Kachel Benachrichtigungen zu aktivieren, verwenden Sie die Arguments -Eigenschaft auf der Kachel Benachrichtigungs Nutzlast, ähnlich der Launch-Eigenschaft für die Toast Benachrichtigungs Nutzlast, um Informationen über den Inhalt in die Kachel Benachrichtigung einzubetten.To enable chaseable tile notifications, you use the Arguments property on the tile notification payload, similar to the launch property on the toast notification payload, to embed info about the content in the tile notification.

Wenn Ihre APP über die Live-Kachel gestartet wird, gibt das System eine Liste von Argumenten aus den aktuellen/zuletzt angezeigten Kachel Benachrichtigungen zurück.When your app is launched via the Live Tile, the system returns a list of arguments from the current/recently displayed tile notifications.

Verwendung von Benachrichtigungen über die beschreibbaren KachelnWhen to use chaseable tile notifications

Die Benachrichtigungen zu beschreibbaren Kacheln werden in der Regel verwendet, wenn Sie die Benachrichtigungs Warteschlange auf Ihrer Live-Kachel verwenden (was bedeutet, dass Sie bis zu 5 verschiedene Benachrichtigungen durchlaufen).Chaseable tile notifications are typically used when you're using the notification queue on your Live Tile (which means you are cycling through up to 5 different notifications). Sie sind auch nützlich, wenn der Inhalt auf Ihrer Live-Kachel möglicherweise nicht mehr mit den neuesten Inhalten in der APP synchron ist.They're also beneficial when the content on your Live Tile is potentially out of sync with the latest content in the app. Beispielsweise wird die Live-Kachel von der News-App alle 30 Minuten aktualisiert, aber wenn die APP gestartet wird, werden die neuesten Nachrichten geladen (was möglicherweise keine etwas enthält, das sich auf der Kachel aus dem letzten Abruf Intervall befunden hat).For example, the News app refreshes its Live Tile every 30 minutes, but when the app is launched, it loads the latest news (which may not include something that was on the tile from the last polling interval). Wenn dies der Fall ist, wird der Benutzer möglicherweise nicht mehr in der Lage sein, die Story zu finden, die er in der Live-Kachel gesehen hat.When this happens, the user might get frustrated about not being able to find the story they saw on their Live Tile. An dieser Stelle können beschreibbare Kachel Benachrichtigungen helfen, indem Sie sicherstellen können, dass das, was der Benutzer auf der Kachel gesehen hat, leicht erkennbar ist.That's where chaseable tile notifications can help, by allowing you to make sure that what the user saw on their Tile is easily discoverable.

Vorgehensweisen bei einer beschreibbaren Kachel BenachrichtigungWhat to do with a chaseable tile notifications

Wichtig zu beachten ist, dass Sie in den meisten Szenarien nicht direkt zu der spezifischen Benachrichtigung navigieren sollten , die auf der Kachel war, als der Benutzer darauf geklickt hat.The most important thing to note is that in most scenarios, you should NOT directly navigate to the specific notification that was on the Tile when the user clicked it. Ihre Live-Kachel wird als Einstiegspunkt für Ihre Anwendung verwendet.Your Live Tile is used as an entry point to your application. Es gibt zwei Szenarios, in denen ein Benutzer auf die Live-Kachel klickt: (1) die APP sollte normal gestartet werden, oder (2) Sie möchten weitere Informationen zu einer bestimmten Benachrichtigung anzeigen, die auf der Live-Kachel war.There can be two scenarios when a user clicks your Live Tile: (1) they wanted to launch your app normally, or (2) they wanted to see more information about a specific notification that was on the Live Tile. Da es nicht möglich ist, dass der Benutzer explizit das gewünschte Verhalten anweist, empfiehlt es sich, die App normal zu starten und gleichzeitig sicherzustellen, dass die vom Benutzer erkannte Benachrichtigung leicht erkennbar ist.Since there's no way for the user to explicitly say which behavior they want, the ideal experience is to launch your app normally, while making sure that the notification the user saw is easily discoverable.

Wenn Sie beispielsweise auf die Live-Kachel der MSN News-App klicken, wird die APP normal gestartet: Sie zeigt die Startseite oder den Artikel an, den der Benutzer zuvor gelesen hat.For example, clicking the MSN News app's Live Tile launches the app normally: it displays the home page, or whichever article the user was previously reading. Auf der Startseite stellt die APP jedoch sicher, dass die Story von der Live-Kachel leicht erkennbar ist.However, on the home page, the app ensures that the story from the Live Tile is easily discoverable. 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 jeweilige Story anzeigen möchten.That way, both scenarios are supported: the scenario where you simply want to launch/resume the app, and the scenario where you want to view the specific story.

Einschließen der Arguments-Eigenschaft in Ihre Kachel Benachrichtigungs NutzlastHow to include the Arguments property in your tile notification payload

In einer Benachrichtigungs Nutzlast ermöglicht die Arguments-Eigenschaft ihrer APP, Daten bereitzustellen, die Sie verwenden können, um die Benachrichtigung zu einem späteren Zeitpunkt zu identifizieren.In a notification payload, the arguments property enables your app to provide data you can use to later identify the notification. Ihre Argumente können z. b. die Story-ID enthalten, sodass Sie beim Start die Story abrufen und anzeigen können.For example, your arguments might include the story's id, so that when launched, you can retrieve and display the story. Die-Eigenschaft akzeptiert eine Zeichenfolge, die Sie beliebig serialisieren können (Abfrage Zeichenfolge, JSON usw.), aber es wird empfohlen, das Format der Abfrage Zeichenfolge zu empfehlen, da es sich um eine fein-und XML-Codierung handelt.The property accepts a string, which can be serialized however you like (query string, JSON, etc), but we typically recommend query string format, since it's lightweight and XML-encodes nicely.

Die-Eigenschaft kann sowohl für die tilevisual -als auch für die tilebinding -Elemente festgelegt werden und wird nach unten weitergegeben.The property can be set on both the TileVisual and the TileBinding elements, and will cascade down. Wenn Sie für jede Kachel Größe die gleichen Argumente wünschen, legen Sie einfach die Argumente für das tilevisualfest.If you want the same arguments on every tile size, simply set the arguments on the TileVisual. Wenn Sie bestimmte Argumente für bestimmte Kachel Größen benötigen, können Sie die Argumente für einzelne tilebinding -Elemente festlegen.If you need specific arguments for specific tile sizes, you can set the arguments on individual TileBinding elements.

In diesem Beispiel wird eine Benachrichtigungs Nutzlast erstellt, bei der die Arguments-Eigenschaft verwendet wird, damit die Benachrichtigung später identifiziert werden kann.This example creates a notification payload that uses the arguments property so that notification can be identified later.

// 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 */ }
        }
    }
};

Überprüfen der Arguments-Eigenschaft beim Starten der APPHow to check for the arguments property when your app launches

Die meisten apps verfügen über eine APP.XAML.cs-Datei, die eine außer Kraft setzung für die ongestartete -Methode enthält.Most apps have an App.xaml.cs file that contains an override for the OnLaunched method. Wie der Name bereits vermuten lässt, ruft Ihre APP diese Methode auf, wenn Sie gestartet wird.As its name suggests, your app calls this method when it's launched. Es wird ein einzelnes Argument, ein launchactivatedeventargs -Objekt, benötigt.It takes a single argument, a LaunchActivatedEventArgs object.

Das launchactivatedeventargs-Objekt verfügt über eine-Eigenschaft, die Lösch Bare Benachrichtigungen ermöglicht: die tileactivatedinfo-Eigenschaft, die den Zugriff auf ein tileactivatedinfo-Objektermöglicht.The LaunchActivatedEventArgs object has a property that enables chaseable notifications: the TileActivatedInfo property, which provides access to a TileActivatedInfo object. Wenn der Benutzer Ihre APP über seine Kachel (anstatt über die APP-Liste, die Suche oder einen anderen Einstiegspunkt) gestartet, initialisiert Ihre APP diese Eigenschaft.When the user launches your app from its tile (rather than the app list, search, or any other entry point), your app initializes this property.

Das tileactivatedinfo-Objekt enthält eine Eigenschaft namens recentlyshownbenachrichtigungen, die eine Liste der Benachrichtigungen enthält, die in den letzten 15 Minuten auf der Kachel angezeigt wurden.The TileActivatedInfo object contains a property called RecentlyShownNotifications, which contains a list of notifications that have been shown on the tile within the last 15 minutes. Das erste Element in der Liste stellt die Benachrichtigung dar, die derzeit auf der Kachel enthalten ist, und die nachfolgenden Elemente stellen die Benachrichtigungen dar, die der Benutzer vor dem aktuellen Element gesehen hat.The first item in the list represents the notification currently on the tile, and the subsequent items represent the notifications that the user saw before the current one. Wenn die Kachel gelöscht wurde, ist diese Liste leer.If your tile has been cleared, this list is empty.

Jede showntilenotifiweist eine Arguments-Eigenschaft auf.Each ShownTileNotification has an Arguments property. Die Arguments-Eigenschaft wird mit der Argument Zeichenfolge aus ihrer Kachel Benachrichtigungs Nutzlast initialisiert, oder NULL, wenn Ihre Nutzlast nicht die Argument Zeichenfolge enthielt.The Arguments property will be initialized with the arguments string from your tile notification payload, or null if your payload didn't include the arguments string.

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 ongestartete über Desktop AnwendungenAccessing OnLaunched from desktop applications

Desktop-Apps (z. b. WPF usw.) können mithilfe der Desktop Bridgeauch beschreibbare Kacheln verwenden.Desktop apps (like WPF, etc) using the Desktop Bridge, can use chaseable tiles too! Der einzige Unterschied besteht darin, auf die ongestartete Argumente zuzugreifen.The only difference is accessing the OnLaunched arguments. Beachten Sie, dass Sie Ihre APP zunächst mit der Desktop Bridge Verpackenmüssen.Note that you first must package your app with the Desktop Bridge.

Wichtig

Erfordert das Update vom Oktober 2018: um die API zu verwenden AppInstance.GetActivatedEventArgs() , müssen Sie das SDK 17763 als Ziel verwenden und Build 17763 oder höher ausführen.Requires October 2018 Update: To use the AppInstance.GetActivatedEventArgs() API, you must target SDK 17763 and be running build 17763 or higher.

Führen Sie für Desktop Anwendungen die folgenden Schritte aus, um auf die Start Argumente zuzugreifen...For desktop applications, to access the launch arguments, do the following...


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

    // API only available on build 17763 or higher
    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;

XML-Beispiel BeispielRaw XML example

Wenn Sie anstelle der Benachrichtigungs Bibliothek unformatierte XML-Daten verwenden, hier ist die XML-Datei.If you're using raw XML instead of the Notifications library, here's the XML.

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