控制从设备收到通知的频率

Posted

技术标签:

【中文标题】控制从设备收到通知的频率【英文标题】:Controlling frequency of notifications received from device 【发布时间】:2017-04-06 19:55:13 【问题描述】:

有没有办法控制从设备接收推送通知的时间和频率?

我正在从 Azure 向 Windows UWP 设备发送推送通知。如果温度达到标签值或更高,则发送通知,标签为 0、10、20、30、40、50 等

所以订阅 20 的设备会在 temp 为 20 或高于 20 时收到来自服务器的通知。

但是我的问题是服务器每半小时更新一次,所以如果一次更新的温度是 23,那么下一次更新总是保持在 20 以上,用户会不断收到推送通知。而且它不会提醒他们任何新事物,只是不断发送相同的消息。

我希望能够为用户指定以下通知设置 因为每半小时接收一次通知会很烦人并经常打扰用户。

总是通知(已经这样做了)

仅在您第一次达到 20 或更高温度时通知

或 每 2 小时通知我一次

仅在这些时间(上午 9:00 - 晚上 10:00)通知 - 我认为这很容易做到,因为我可以通过后台任务取消订阅我猜想的通知,然后重新订阅它)

【问题讨论】:

【参考方案1】:

我正在从 Azure 向 Windows UWP 设备发送推送通知。如果温度达到标签值或更高,则发送通知,标签为 0、10、20、30、40、50 等

据我所知,您可以利用 Azure Notification Hubs 将推送通知发送到 UWP 应用,并且在通过通知中心发送通知时,您可以使用 Routing and tag expressions 将通知推送到特定设备集。但正如官方教程所说的Tag expressions:

标记表达式可以包含所有布尔运算符,例如 AND (&&)、OR (||) 和 NOT (!)。它们还可以包含括号。如果标签表达式仅包含 OR,则标签表达式限制为 20 个标签;否则它们被限制为 6 个标签。

根据我对您的场景的理解,如果温度是28,那么您需要与支持的标签进行比较并发送通知如下:

NotificationHubClient.SendWindowsNativeNotificationAsync("toast","(0||10||20)")

有没有办法控制从设备接收推送通知的时间和频率?

据我所知,您没有内置功能可以实现此目的。据我了解,您需要使用 Installations 模型并将设备注册信息(InstallationIduser tagsLastPushNotificationDateTime 等)存储在数据存储中,然后过滤注册记录未收到通知的有效InstallationIds(设备),然后使用以下方法向特定安装(设备)发送通知,如下:

_hubclient.SendWindowsNativeNotificationAsync("payload", "$InstallationId:" + installationId + "");

此外,您可以关注此官方tutorial,了解有关通知中心的设备注册管理。还有官方blog关于Azure Notification Hubs: Best Practices for Management Devices,你可以参考一下。

【讨论】:

以上是关于控制从设备收到通知的频率的主要内容,如果未能解决你的问题,请参考以下文章

BLE广告包获取频率变得非常低

树莓派的频率管理和热控制

树莓派的频率管理和热控制

时钟频率

如何在用户通知中设置重复频率[重复]

客户端未收到主题服务器端的 FCM 通知