追跡可能なタイル通知Chaseable tile notifications

追跡可能なタイル通知を使用すると、ユーザーがライブ タイルをクリックしたときに、アプリのライブ タイルに表示されるタイル通知を特定することができます。Chaseable tile notifications let you determine which tile notifications your app's Live Tile was displaying when the user clicked the tile.
たとえば、新しいアプリでこの機能を使用して、ユーザーがライブ タイルを起動したときにそのタイルに表示される新しいストーリーを特定することができます。これにより、ユーザーが見つけることができるように、ストーリーを目立たせて表示することができます。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.

重要

Anniversary Update が必要です:使用した chaseable タイル通知を使用するC#、C++、または VB ベースの UWP アプリ、14393 SDK をターゲットする必要があり、実行しているビルド 14393 またはそれ以降。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. JavaScript ベースの UWP アプリの場合は、SDK 17134 以降をターゲットとし、ビルド 17134 以降を実行している必要があります。For JavaScript-based UWP apps, you must target SDK 17134 and be running build 17134 or higher.

重要な API:LaunchActivatedEventArgs.TileActivatedInfo プロパティTileActivatedInfo クラスImportant APIs: LaunchActivatedEventArgs.TileActivatedInfo property, TileActivatedInfo class

方法How it works

追跡可能なタイル通知を有効にするには、タイル通知ペイロードで Arguments プロパティ (トースト通知ペイロードの起動プロパティに類似) を使用して、タイル通知のコンテンツに関する情報を埋め込みます。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.

アプリがライブ タイル経由で起動されると、システムは、現在または最後に表示されたタイル通知を基に引数の一覧を返します。When your app is launched via the Live Tile, the system returns a list of arguments from the current/recently displayed tile notifications.

追跡可能なタイル通知を使用する状況When to use chaseable tile notifications

通常、追跡可能なタイル通知は、ライブ タイルで通知キューを使っているとき (つまり、最大 5 件の異なる通知を循環しているとき) に使用されます。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). 追跡可能なタイル通知は、ライブ タイルのコンテンツがアプリの最新のコンテンツと同期されていないと考えられる場合にも役立ちます。They're also beneficial when the content on your Live Tile is potentially out of sync with the latest content in the app. たとえば、ニュース アプリでは 30 分ごとにライブ タイルが更新されますが、アプリが起動すると、最新のニュースが読み込まれます (前回のポーリング間隔でタイルに表示されていた情報が含まれなくなる可能性があります)。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). この場合、ライブ タイルに表示されていたストーリーを見つけることができなくなり、ユーザーが不満を感じる可能性があります。When this happens, the user might get frustrated about not being able to find the story they saw on their Live Tile. こうした問題に対応する際に追跡可能なタイル通知が役立ちます。このタイル通知によって、タイルでユーザーに表示されていた情報を簡単に見つけることができます。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.

追跡可能なタイル通知で実行できることWhat to do with a chaseable tile notifications

注意が必要な最も重要なことは、ほとんどのシナリオでは、ユーザーがクリックしたときにタイルに表示されていた特定の通知に直接移動しないということです。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. ライブ タイルは、アプリケーションへのエントリ ポイントとして使用されます。Your Live Tile is used as an entry point to your application. ユーザーは、ライブ タイルをクリックした 2 つのシナリオがあります。(通常、アプリを起動したいと 1)、またはライブ タイルには、特定の通知の詳細についてを参照してください (2) するつもりでした。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. 必要な動作をユーザーが明示的に指定する方法がないため、理想的なエクスペリエンスは、ユーザーに表示されていた通知を簡単に検出できるようにしながら、アプリを通常どおりに起動するというものになります。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.

たとえば、MSN ニュース アプリのライブ タイルをクリックしてアプリを通常どおりに起動したときに、ホーム ページを表示するか、またはユーザーが前に読んでいたいずれかの記事を表示するようにします。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. ただしホーム ページを表示した場合は、アプリでライブ タイルのストーリーを簡単に検出できるようにします。However, on the home page, the app ensures that the story from the Live Tile is easily discoverable. これにより、両方のシナリオ (単純にアプリを起動/再開するシナリオと特定のストーリーを表示するシナリオ) がサポートされます。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.

タイル通知ペイロードに Arguments プロパティを含める方法How to include the Arguments property in your tile notification payload

通知ペイロードで引数プロパティを使用することで、アプリは、後で通知を識別する際に使用できるデータを提供することができます。In a notification payload, the arguments property enables your app to provide data you can use to later identify the notification. たとえば、引数にストーリーの ID を含めて、起動時にストーリーを取得し表示することができます。For example, your arguments might include the story's id, so that when launched, you can retrieve and display the story. プロパティは、シリアル化することができる文字列であればどのような文字列でも受け入れます (クエリ文字列、JSON など)。ただし、通常はクエリ文字列の形式を使用することをお勧めします。これは、クエリ文字列は軽量であり、適切に XML エンコードされるためです。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.

プロパティは TileVisual 要素と TileBinding 要素の両方に対して設定でき、カスケードが起こります。The property can be set on both the TileVisual and the TileBinding elements, and will cascade down. すべてのタイル サイズで同じ引数が必要な場合は、引数を TileVisual 要素に対して設定するだけです。If you want the same arguments on every tile size, simply set the arguments on the TileVisual. 特定のタイル サイズで特定の引数が必要な場合は、引数を個別の TileBinding 要素に対して設定することができます。If you need specific arguments for specific tile sizes, you can set the arguments on individual TileBinding elements.

この例では、通知を後で識別するための引数プロパティを使用する通知ペイロードを作成します。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 */ }
        }
    }
};

アプリの起動時に引数プロパティを確認する方法How to check for the arguments property when your app launches

ほとんどのアプリは App.xaml.cs を保持しており、このファイルには OnLaunched メソッドのオーバーライドが含まれています。Most apps have an App.xaml.cs file that contains an override for the OnLaunched method. その名前が示すように、アプリは起動時にこのメソッドを呼び出します。As its name suggests, your app calls this method when it's launched. 使用される引数は 1 つだけで、それは LaunchActivatedEventArgs オブジェクトです。It takes a single argument, a LaunchActivatedEventArgs object.

LaunchActivatedEventArgs オブジェクトには、追跡可能な通知を有効にするプロパティがあります。そのプロパティは、TileActivatedInfo プロパティで、TileActivatedInfo オブジェクトへのアクセスを可能にします。The LaunchActivatedEventArgs object has a property that enables chaseable notifications: the TileActivatedInfo property, which provides access to a TileActivatedInfo object. ユーザーがタイルからアプリを起動すると (アプリ一覧、検索、または他のエントリ ポイントから起動するのではありません)、アプリはこのプロパティを初期化します。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.

TileActivatedInfo オブジェクトには RecentlyShownNotifications と呼ばれるプロパティが含まれています。このプロパティは、過去 15 分以内にタイルに表示されていた通知の一覧を保持しています。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. 一覧の最初の項目はタイルの現在の通知を表しており、それ以降の項目は現在の通知よりも前に表示されていた通知を表しています。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. タイルがクリアされた場合、この一覧は空になります。If your tile has been cleared, this list is empty.

各 ShownTileNotification では、引数プロパティがあります。Each ShownTileNotification has an Arguments property. Arguments プロパティは、ペイロードには、引数文字列が含まれていなかった場合、タイル通知のペイロードまたは null の引数文字列で初期化されます。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
}

デスクトップ アプリケーションから OnLaunched へのアクセスAccessing OnLaunched from desktop applications

デスクトップ アプリ (Win32 と WPF では、同様になど) を使用して、デスクトップ ブリッジ、chaseable タイルにも使用できます。Desktop apps (like Win32, WPF, etc) using the Desktop Bridge, can use chaseable tiles too! 唯一の違いは、OnLaunched 引数にアクセスします。The only difference is accessing the OnLaunched arguments. まず必要なメモデスクトップ ブリッジを使用してアプリをパッケージ化します。Note that you first must package your app with the Desktop Bridge.

重要

2018 の年 10 月の更新プログラムが必要:使用する、 AppInstance.GetActivatedEventArgs() API、SDK 17763 をターゲットする必要があり、17763 またはそれ以降、ビルドを実行します。Requires October 2018 Update: To use the AppInstance.GetActivatedEventArgs() API, you must target SDK 17763 and be running build 17763 or higher.

デスクトップ アプリケーションは、起動引数にアクセスするには次の操作.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 の例Raw XML example

Notifications ライブラリではなく生の XML を使用する場合、XML は次のようになります。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>