Универсальное закрытие

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

Важно!

Требуется юбилейное обновление. Для использования универсального закрытия необходимо использовать пакет SDK 14393 и сборку 14393 или более поздней версии.

Распространенным примером этого сценария являются напоминания календаря: у вас есть приложение календаря на обоих устройствах, вы получаете напоминание на телефоне и на компьютере, вы закрываете уведомление на компьютере, и благодаря универсальному закрытию напоминание также закрывается на телефоне! Для включения универсального закрытия требуется всего лишь одна строка кода!

Схема универсального закрытия

В этом сценарии главное состоит в том, что одно приложение устанавливается на нескольких устройствах, то есть каждое устройство уже получает уведомления. Приложение календаря — классический пример, так как обычно одинаковое приложение календаря устанавливается на компьютере с Windows и на телефоне, и каждый экземпляр приложения отправляет вам напоминания на каждом устройстве. Если добавить поддержку универсального закрытия, можно связать экземпляры одинаковых напоминаний на разных устройствах.

Как включить универсальное закрытие

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

Схема RemoteId универсального закрытия

RemoteId: уникальный идентификатор уведомления на разных устройствах.

Для добавления RemoteId нужна всего одна строку кода, которая добавляет поддержку универсального закрытия! Вы выбираете способ создания RemoteId, однако вам необходимо убедиться, что это значение однозначно идентифицирует уведомление на разных устройствах. Следует помнить, что одинаковые идентификаторы могут создаваться различными экземплярами приложения, которое выполняется на различных устройствах.

Например, в приложении планировщика домашней работы я создаю RemoteId, указывая его тип, "reminder", а затем я добавляю включите идентификатор учетной записи элемента домашней работы. Я могу постоянно создавать одинаковое значение RemoteId независимо от того, какое устройство отправляет уведомление, поскольку эти идентификаторы являются общими для всех устройств.

var toast = new ScheduledToastNotification(content.GetXml(), startTime);
 
// If the RemoteId property is present
if (ApiInformation.IsPropertyPresent(typeof(ScheduledToastNotification).FullName, nameof(ScheduledToastNotification.RemoteId)))
{
    // Assign the RemoteId to add support for Universal Dismiss
    toast.RemoteId = $"reminder_{account.AccountId}_{homework.Identifier}"
}
  
ToastNotificationManager.CreateToastNotifier().AddToSchedule(toast);

Следующий код выполняется на телефоне и в классическом приложение, то есть уведомления на обоих устройствах будет иметь одинаковый RemoteId.

Это все, что нужно сделать! Когда пользователь закрывает (или щелкает) уведомление, мы проверяем, есть ли у него RemoteId. Если это так, мы инициируем закрытие уведомлений с этим RemoteId на всех устройствах пользователя.

Известная проблема: при получении RemoteId с помощью API ToastNotificationHistory.GetHistory() всегда возвращается пустая строку, а не указанное значение RemoteId. Не волнуйтесь, все работает — это означает, что значение недействительно.

Примечание

Если пользователь или предприятие отключает зеркальное отображение уведомлений для вашего приложения (или полностью отключает зеркальное отображение уведомлений), универсальное закрытие не будет работать, поскольку мы не будем получать уведомления в облаке.

Поддерживаемые устройства

Начиная с юбилейного обновления универсальное закрытие поддерживается в Windows Mobile и в Windows для настольных компьютеров. Универсальное закрытие работает в обоих направлениях: между компьютерами, между телефоном и компьютером и между телефонами.