追跡可能なタイル通知
Note
Lives タイルは、新しいバージョンの Windows ではサポートされていない Windows 10 の機能です。 新しいアプリの場合は、 App アイコンの現在のガイダンスに従うことをお勧めします。
追跡可能なタイル通知を使用すると、ユーザーがタイルをクリックしたときにアプリのライブ タイルにどのタイル通知が表示されていたかを特定することができます。 たとえば、ニュース アプリでは、この機能を使用して、ユーザーがライブ タイルを起動したときに表示されていたニュース ストーリーを特定できます。これにより、ユーザーが見つけられるようにストーリーが目立つように表示される可能性があります。
重要
Anniversary Update が必須: C#、C++、または VB ベースの UWP アプリで追跡可能なタイル通知を使用するには、SDK 14393 をターゲットとし、ビルド 14393 以降を実行している必要があります。
重要な API: LaunchActivatedEventArgs.TileActivatedInfo プロパティ、TileActivatedInfo クラス
しくみ
追跡可能なタイル通知を有効にするには、トースト通知ペイロードの launch プロパティと同様に、タイル通知ペイロードの Arguments プロパティを使用して、タイル通知にコンテンツに関する情報を埋め込みます。
ライブ タイルを使用してアプリを起動すると、現在または最近表示されたタイル通知から引数の一覧が返されます。
追跡可能なタイル通知を使用する場合
追跡可能なタイル通知は、通常、ライブ タイルで通知キューを使用している場合に使用されます (つまり、最大 5 つの異なる通知を循環します)。 また、ライブ タイルのコンテンツがアプリの最新のコンテンツと同期していない可能性がある場合にも役立ちます。 たとえば、ニュース アプリはライブ タイルを 30 分ごとに更新しますが、アプリを起動すると、最新のニュースが読み込まれます (最後のポーリング間隔のタイルに含まれていない可能性があります)。 これが起こると、ユーザーはライブ タイルで見たストーリーが見つからないことにイライラする可能性があります。 ここでは、追跡可能なタイル通知を使用して、ユーザーがタイルで見たものを簡単に検出できるようにすることで役立ちます。
追跡可能なタイル通知の操作
注意すべき最も重要な点は、ほとんどのシナリオでは、ユーザーがタイルをクリックしたときにタイル上にあった特定の通知に直接移動しないでください。 ライブ タイルは、アプリケーションへのエントリ ポイントとして使用されます。 ユーザーがライブ タイルをクリックすると、(1) アプリを正常に起動するか、(2) ライブ タイル上の特定の通知に関する詳細情報を表示する必要がある、という 2 つのシナリオが考えられます。 ユーザーが望む動作を明示的に言う方法がないため、理想的なエクスペリエンスは、ユーザーが見た通知が簡単に見つかるようにしながら、アプリを正常に起動することです。
たとえば、MSN ニュース アプリのライブ タイルをクリックすると、通常どおりにアプリが起動します。ホーム ページや、ユーザーが以前に読んでいた記事が表示されます。 ただし、ホーム ページでは、アプリによってライブ タイルのストーリーが簡単に見つかりやすくなります。 そうすることで、両方のシナリオがサポートされます。単にアプリを起動または再開するシナリオと、特定のストーリーを表示するシナリオです。
タイル通知ペイロードに Arguments プロパティを含める方法
通知ペイロードでは、arguments プロパティを使用して、後で通知を識別するために使用できるデータをアプリで提供できます。 たとえば、引数にストーリーの ID が含まれている場合、起動するとストーリーを取得して表示できます。 このプロパティは文字列を受け入れます。これは好きなようにシリアル化できますが (クエリ文字列、JSON など)、通常はクエリ文字列形式をお勧めします。これは軽量で XML エンコードが適切であるためです。
このプロパティは TileVisual 要素と TileBinding 要素の両方で設定でき、カスケードダウンされます。 すべてのタイル サイズで同じ引数が必要な場合は、TileVisual に引数を設定するのみです。 特定のタイル サイズに対して特定の引数が必要な場合は、個々の TileBinding 要素に引数を設定できます。
この例では、後で通知を識別できるように、arguments プロパティを使用する通知ペイロードを作成します。
// 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 */ }
}
}
};
アプリの起動時に arguments プロパティをチェックする方法
ほとんどのアプリには、OnLaunched メソッドのオーバーライドを含む App.xaml.cs ファイルがあります。 その名前が示すように、アプリは起動時にこのメソッドを呼び出します。 単一の引数 LaunchActivatedEventArgs オブジェクトを受け取ります。
LaunchActivatedEventArgs オブジェクトには、追跡可能な通知を有効にするプロパティ (TileActivatedInfo オブジェクトへのアクセスを提供する TileActivatedInfo プロパティ) があります。 ユーザーが (アプリ一覧、検索、またはその他のエントリ ポイントではなく) タイルからアプリを起動すると、アプリはこのプロパティを初期化します。
TileActivatedInfo オブジェクトには、RecentlyShownNotifications というプロパティが含まれています。このプロパティには、過去 15 分以内にタイルに表示された通知の一覧が含まれています。 一覧の最初の項目は現在タイル上の通知を表し、後続の項目は、ユーザーが現在のアイテムの前に表示した通知を表します。 タイルがクリアされている場合、この一覧は空です。
各 ShownTileNotification には Arguments プロパティがあります。 Arguments プロパティは、タイル通知ペイロードの引数文字列で初期化されます。ペイロードに引数文字列が含まれていない場合は null になります。
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 へのアクセス
デスクトップ ブリッジを使用するデスクトップ アプリ (WPF など) でも追跡可能なタイルを使用できます。 唯一の違いは OnLaunched 引数へのアクセスです。 まず、デスクトップ ブリッジでアプリをパッケージ化する必要があることに注意してください。
重要
October 2018 Update が必要: AppInstance.GetActivatedEventArgs()
API を使用するには、SDK 17763 をターゲットとし、ビルド 17763 以降を実行している必要があります。
デスクトップ アプリケーションの場合、起動引数にアクセスするには、次のようにします。
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;
未加工 XML の例
Notifications ライブラリの代わりに生の XML を使用している場合は、XML を次に示します。
<tile>
<visual arguments="action=storyClicked&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&story=43f939ag&story=201c9b1&story=d9481ca">
<text>Can your dog understand what you're saying?</text>
... (another story)
... (one more story)
</binding>
</visual>
</tile>