定期通知概述

定期通知(也称为轮询通知)通过从云服务下载内容,以固定间隔更新磁贴和徽章。 若要使用定期通知,客户端应用代码需要提供两部分信息:

  • 用于Windows轮询应用的磁贴或徽章更新的Web位置的统一资源标识符(URI)
  • 应轮询 URI 的频率

定期通知让你的应用只需极少的云服务和客户端投资即可提供动态磁贴更新。 定期通知是向广泛受众分配相同内容的出色传递方法。

注意 可以通过下载适用于 Windows 8.1 的推送和定期通知示例并在 Windows 10 应用中重复使用其源代码来了解详细信息。

 

工作原理

定期通知要求应用托管一个云服务。 该服务将由已安装应用的所有用户定期轮询。 在每个轮询间隔(例如每小时一次),Windows 向 URI 发送 HTTP GET 请求,下载以 XML 格式提供的磁贴或徽章内容,然后将内容显示在应用的磁贴上。

请注意,定期更新不能与 Toast 通知一起使用。 Toast 最好通过 计划的推送 通知传递。

URI 位置和 XML 内容

任何有效的 HTTP 或 HTTPS 网址均可用作要轮询 URI。

云服务器的响应包括已下载的内容。 从 URI 返回的内容必须符合 磁贴徽章 的 XML 架构规范,并且必须使用 UTF-8 编码。 可以使用预定义的 HTTP 头为通知指定 过期时间 或标签。

Polling Behavior

调用以下方法之一以开始轮询:

调用这些方法之一时,会立即轮询 URI,并使用接收的内容更新磁贴或徽章。 在此初始轮询之后,Windows 将继续依照请求的时间间隔提供更新。 轮询会一直持续,直到您显式地停止它(使用 TileUpdater.StopPeriodicUpdate)、您的应用被卸载,或者在辅助磁贴的情况下,该磁贴被移除。 否则,即使你的应用程序未再次启动,Windows 仍会继续轮询动态磁贴或徽章的更新。

重现周期

指定重复出现的间隔,作为上面所列方法的一个参数。 请注意,虽然 Windows 尽量根据请求进行轮询,但此间隔不是很准确。 所请求的轮询间隔最长可能延迟 15 分钟,具体取决于 Windows。

开始时间

你可以选择指定一天中的某个特定时间开始轮询。 考虑应用一天仅更改一次磁贴内容。 在这种情况下,我们建议在接近您更新云服务的时间进行轮询。 例如,如果每日购物网站在上午 8 点发布当天的优惠,请在上午 8 点之后不久检查新的磁贴内容。

如果您提供开始时间,那么对该方法的第一次调用将立即轮询内容。 然后,定期轮询在提供的开始时间的 15 分钟内开始。

自动重试行为

仅当设备处于联机状态时,才会轮询 URI。 如果网络可用,但因某种原因无法联系 URI,则轮询间隔此次迭代将被跳过,并将在下个间隔再次轮询 URI。 如果在达到轮询间隔时设备处于关闭、睡眠或休眠状态,则当设备从这些状态恢复时,将轮询 URI。

处理应用更新

如果您发布的应用更新更改了轮询 URI,那么您应该每日添加一个 时间触发器后台任务,使用新的 URI 调用 StartPeriodicUpdate,以确保磁贴正在使用新的 URI。 否则,如果用户收到应用更新但未启动应用,他们的磁贴仍将使用旧 URI,如果 URI 已无效或者返回负载引用了本地不再存在的图像,磁贴可能会无法显示。

磁贴和徽章通知过期

默认情况下,定期磁贴和锁屏提醒通知自下载之日起三天过期。 通知到期时,此内容将从锁屏提醒、磁贴或队列中删除,且不再向用户显示。 最佳做法是在所有定期磁贴和锁屏提醒通知上设置显式过期时间,使用对应用或通知有意义的时间,以确保内容不会超过相关时间。 对于具有已定义的使用寿命的内容来说,一个显式过期时间是必需的。 它还可确保在无法连接云服务或用户长时间断开网络时删除过时的内容。

你的云服务通过在响应负载中包括 X-WNS-Expires HTTP 标头来为通知设置过期日期和时间。 X-WNS-Expires HTTP 标头符合 HTTP 日期格式。 有关详细信息,请参阅 StartPeriodicUpdateStartPeriodicUpdateBatch

例如,在股市的活跃交易日,您可以设置股票价格更新的有效期为轮询间隔的两倍(例如,如果每半小时轮询一次的话,则为收到一小时)。 作为另一个示例,新闻应用可能会确定一天是每日新闻磁贴更新的适当过期时间。

通知队列中的周期性通知

可以将定期磁贴更新与 通知循环配合使用。 默认情况下,“开始”屏幕中的磁贴会显示单条通知的内容,直到有新的通知替换当前的通知。 启用循环功能时,队列中最多会保留五个通知,磁贴会依次展示它们。

如果队列达到了 5 条通知的容量上限,则下一条新通知将替换队列中最早的通知。 但是,通过在通知上设置标记,你可以影响队列的替换策略。 标记是特定于应用的字符串,区分大小写,最多包含 16 个字母数字字符,可在响应负载的 X-WNS-Tag HTTP 标头中指定。 Windows 将传入通知的标记与队列中已存在的所有通知的标记进行比较。 如果找到匹配项,新通知会替换具有相同标签的排队通知。 如果发现不匹配,则应用默认替换规则,新通知将替换队列中最早的通知。

你可使用通知队列和标记来实现各种丰富的通知方案。 例如,股票应用可发送 5 条通知,每条通知关注一支不同的股票并以相应股票的名称作为标记。 这样可以防止队列包含同一股票的两条通知,其中较旧的通知已过期。

有关详细信息,请参阅 使用通知队列

启用通知队列

若要实现通知队列,请首先启用磁贴队列(请参阅如何使用具有本地通知的通知队列)。 启用队列的操作只需在应用的生命周期内完成一次,但在每次启动应用时调用它不会造成任何损害。

同时轮询多个通知

必须为要 Windows 下载磁贴的每个通知提供唯一的 URI。 你可使用 StartPeriodicUpdateBatch 方法一次最多提供五个 URI 与通知队列配合使用。 每个 URI 都会轮询单个通知有效负载,同时或接近同一时间。 每个轮询的 URI 都可以返回其自己的过期时间和标签值。