全局消除

通用消除(由云中的 Action Center 提供支持)表示,从一台设备消除通知时,也会消除其他设备上的相同通知。

重要

需要周年更新:必须以 SDK 14393 为目标,并运行内部版本 14393 或更高版本才能使用通用消除。

此方案的常见示例是日历提醒...两台设备上都有日历应用...在手机和桌面上收到提醒...在桌面上单击“关闭...”由于通用消除,手机上的提醒也被驳回! 启用通用消除只需要一行代码!

通用消除关系图

在此方案中,关键事实是 同一应用安装在多个设备上,这意味着 每个设备都已收到通知。 日历应用是一个标志性示例,因为你通常同时在 Windows 电脑和手机上安装了相同的日历应用,并且应用的每个实例都已在每台设备上发送提醒。 通过添加对通用消除的支持,可以跨设备链接相同提醒的这些实例。

如何启用通用消除

作为开发人员,启用通用消除非常简单。 只需提供一个 ID,允许我们跨设备链接每个通知,以便在用户从一台设备消除通知时,将从另一台设备中消除相应的链接通知。

通用消除 RemoteId 关系图

RemoteId:唯一标识跨设备的通知的标识符。

t 只需一行代码即可添加 RemoteId,从而支持通用消除! 生成 RemoteId 的方式取决于你 - 但是,你需要确保它唯一地标识跨设备的通知,并且同一标识符可以从在不同设备上运行的应用的不同实例生成。

例如,在家庭作业规划器应用中,我通过说其类型为“提醒”来生成 RemoteId,然后包括联机帐户 ID 和家庭作业项目的联机标识符。 无论哪个设备发送通知,我都可以一致地生成完全相同的 RemoteId,因为这些联机 ID 在设备之间共享。

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 的消除。

已知问题:通过 ToastNotificationHistory.GetHistory() API 检索 RemoteId 将始终返回空字符串,而不是指定的 RemoteId。 别担心,一切都是正常运行的 - 它只检索损坏的值。

注意

如果用户或企业禁用 应用的通知镜像 (或完全禁用通知镜像),则通用消除将不起作用,因为我们在云中没有通知。

支持的设备

自周年更新以来,Windows Mobile 和 Windows 桌面支持通用消除。 通用消除在 PC-PC、PC-Phone 和 Phone-Phone 之间双向工作。