Поделиться через


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

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

Внимание

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

Типичным примером этого сценария является напоминания о календаре... у вас есть приложение календаря на обоих устройствах... вы получите напоминание на телефоне и на рабочем столе... Вы щелкаете кнопку "Закрыть" на рабочем столе... благодаря универсальному увольнению напоминание на телефоне также уволено! Для включения универсального увольнения требуется только одна строка кода!

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

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

Включение универсального увольнения

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

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

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

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

Например, в приложении планировщика домашней работы я создаю свой RemoteId, сказав, что он имеет тип "напоминание", а затем я включаю идентификатор учетной записи в Интернете и идентификатор домашней работы. Я могу последовательно создать тот же 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 с помощью ToastNotificationHistory.GetHistory() API всегда возвращает пустую строку, а не указанную вами удаленную . Не беспокойтесь, все функционально - это только получение значения, которое сломано.

Примечание.

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

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

Начиная с юбилейного обновления универсальное увольнение поддерживается в Windows Mobile и Windows Desktop. Универсальное увольнение работает в обоих направлениях между PC-PC, PC-Phone и Phone-Phone.