Обновлять все размеры плитки в приложении WIndows 8 с периодическим уведомлением

У меня есть прикладная среда (в JavaScript), которая динамически устанавливает URL для живого фида плиток. В моем коде у меня есть что-то вроде ниже, и это работает для широкой плитки, но когда я изменяю размер плитки на "средний" (или "маленький"), живая подача / обновление исчезают. Если я вернусь к ширине, она будет работать нормально. Других настроек плитки нет (используется по умолчанию).

У меня вопрос: есть ли возможность обновить все размеры листов одновременно или мне придется создавать полный объект XML, используя getTemplateContent() и TileUpdater's update() метод?

В настоящее время я обновляю периодические URL-адреса примерно так (опять же, это работает для широких плиток):

var updater = Windows.UI.Notifications.TileUpdateManager.createTileUpdaterForApplication();
updater.clear();
updater.stopPeriodicUpdate();
updater.enableNotificationQueue(true);
updater.startPeriodicUpdateBatch(
    [ new Windows.Foundation.Uri(feedUrlString) ],
    Windows.UI.Notifications.PeriodicUpdateRecurrence.halfHour
);

1 ответ

Чтобы обновить несколько размеров листов в одном обновлении, полезная нагрузка XML для этого обновления должна содержать отдельные элементы для каждого размера листов.

Вы можете увидеть это в примере плиток и значков приложения в SDK. Сценарий 1, например, демонстрирует, как это сделать, используя (a) библиотеку C# NotificationExtensions, (b) построение XML в виде строки и (c) использование getTemplateContent. Один из этих методов должен работать для вас.

Чтобы привести пример для случая (а), вот код из сценария 1, который также имеет комментарий, объясняющий больше:

// This sample application supports all four tile sizes – small (Square70x70), medium (Square150x150), wide (Wide310x150) and large (Square310x310).
// This means that the user may have resized their tile to any of these four sizes for their custom Start screen layout.
// Because an app has no way of knowing what size the user resized their app tile to, an app should include template bindings
// for each supported tile sizes in their notifications. The only exception is the small (Square70x70) tile size because this size
// does not support live tile notifications, which is why there are no Square70x70 tile templates.
// We assemble one notification with three template bindings by including the content for each smaller
// tile in the next size up. Square310x310 includes Wide310x150, which includes Square150x150.
// If we leave off the content for a tile size which the application supports, the user will not see the
// notification if the tile is set to that size.

// Create a notification for the Square310x310 tile using one of the available templates for the size.
var tileContent = NotificationsExtensions.TileContent.TileContentFactory.createTileSquare310x310Text09();
tileContent.textHeadingWrap.text = "Hello World! My very own tile notification";

// Create a notification for the Wide310x150 tile using one of the available templates for the size.
var wide310x150Content = NotificationsExtensions.TileContent.TileContentFactory.createTileWide310x150Text03();
wide310x150Content.textHeadingWrap.text = "Hello World! My very own tile notification";

// Create a notification for the Square150x150 tile using one of the available templates for the size.
var square150x150Content = NotificationsExtensions.TileContent.TileContentFactory.createTileSquare150x150Text04();
square150x150Content.textBodyWrap.text = "Hello World! My very own tile notification";

// Attach the Square150x150 template to the Wide310x150 template.
wide310x150Content.square150x150Content = square150x150Content;

// Attach the Wide310x150 template to the Square310x310 template.
tileContent.wide310x150Content = wide310x150Content;

// Send the notification to the application’s tile.
Windows.UI.Notifications.TileUpdateManager.createTileUpdaterForApplication().update(tileContent.createNotification());
Другие вопросы по тегам