Уведомления на отслеживаемых плитках

Уведомления на плитке, доступные для преследования, позволяют определить, какие уведомления о плитке приложения отображаются при щелчке плитки пользователем.
Например, приложение новостей может использовать эту функцию, чтобы определить, какая история новостей отображается при запуске пользователя; это может гарантировать, что история отображается в видном месте, чтобы пользователь мог найти его.

Важно!

Требуется юбилейное обновление: чтобы использовать отслеживаемые уведомления плиток с приложениями UWP на основе C#, C++или VB, необходимо использовать пакет SDK 14393 и запускать сборку 14393 или более поздней версии. Для приложений UWP на основе JavaScript необходимо использовать пакет SDK 17134 и запускать сборку 17134 или более позднюю версию.

Важные API: LaunchActivatedEventArgs.TileActivatedInfo, класс TileActivatedInfo

Как это работает

Чтобы включить уведомления на плитке, используйте свойство Arguments для полезных данных уведомления плитки, аналогичное свойству запуска полезных данных всплывающего уведомления, чтобы внедрить сведения о содержимом в уведомление плитки.

При запуске приложения с помощью динамической плитки система возвращает список аргументов из текущих или недавно отображаемых уведомлений плитки.

Когда следует использовать отслеживаемые уведомления об плитках

Уведомления, доступные для просмотра, обычно используются при использовании очереди уведомлений на динамической плитке (это означает, что вы велоспортитесь до 5 разных уведомлений). Они также полезны, когда содержимое на динамической плитке потенциально не синхронизируется с последним содержимым в приложении. Например, приложение "Новости" обновляет плитку Live каждые 30 минут, но при запуске приложения загружает последние новости (которые могут не включать то, что было на плитке с последнего интервала опроса). Когда это происходит, пользователь может быть разочарован тем, что не сможет найти историю, которую они видели на своей живой плитке. Вот где погоняемые уведомления об плитке могут помочь, позволяя вам убедиться, что пользователь видел на плитке легко обнаруживаем.

Что делать с отслеживаемыми уведомлениями плитки

Важно отметить, что в большинстве сценариев вы не должны напрямую переходить к определенному уведомлению , которое было на плитке, когда пользователь щелкнул его. Динамическая плитка используется в качестве точки входа в приложение. Существует два сценария, когда пользователь щелкает плитку Live: (1) они хотели запустить приложение обычно или (2) они хотели просмотреть дополнительные сведения о конкретном уведомлении, которое было на динамической плитке. Так как пользователю нет способа явно сказать, какое поведение они хотят, идеальный интерфейс заключается в том, чтобы запустить приложение обычно, убедившись, что уведомление, которое пользователь видел, легко обнаружить.

Например, щелкнув приложение MSN News Live Tile, обычно запускает приложение: отображает домашнюю страницу или любую статью, которую пользователь ранее читал. Однако на домашней странице приложение гарантирует, что история из динамической плитки легко обнаруживается. Таким образом, поддерживаются оба сценария: сценарий, в котором вы просто хотите запустить или возобновить приложение, и сценарий, в котором требуется просмотреть конкретную историю.

Включение свойства Arguments в полезные данные уведомления плитки

В полезных данных уведомления свойство аргументов позволяет приложению предоставлять данные, которые можно использовать для последующего идентификации уведомления. Например, аргументы могут включать идентификатор истории, чтобы при запуске можно получить и отобразить историю. Свойство принимает строку, которая может быть сериализована, однако вам нравится (строка запроса, JSON и т. д.), но обычно рекомендуется формат строки запроса, так как он легко и xml-кодирует.

Свойство можно задать как на плитке, так и в элементах TileBinding, и будет каскадно. Если вы хотите одинаковые аргументы для каждого размера плитки, просто задайте аргументы в TileVisual. Если вам нужны определенные аргументы для определенных размеров плиток, можно задать аргументы для отдельных элементов TileBinding .

В этом примере создается полезные данные уведомления, использующие свойство аргументов, чтобы его можно было определить позже.

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

Как проверка для свойства аргументов при запуске приложения

Большинство приложений имеют файл App.xaml.cs, содержащий переопределение для метода OnLaunched . Как предполагает его имя, приложение вызывает этот метод при запуске. Он принимает один аргумент, объект 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. Обратите внимание, что сначала необходимо упаковить приложение с помощью мост для классических приложений.

Важно!

Требуется обновление за октябрь 2018 г. Для использования API необходимо установить целевой AppInstance.GetActivatedEventArgs() пакет 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

Если вы используете необработанный XML вместо библиотеки уведомлений, вот 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>