路由和标记表达式

通过标记表达式,可以在通过通知中心发送推送通知时以特定设备集或更具体的注册为目标。

面向特定注册

面向特定注册的唯一方法是将它们与标记相关联,然后以该标记为目标。 如 注册管理中所述,为了接收应用在通知中心上注册设备句柄的推送通知。 在通知中心创建注册后,应用程序后端可以向其发送推送通知。

应用程序后端可以通过以下方式选择要以特定通知为目标的注册:

  1. 广播:通知中心中的所有注册都会收到通知。

  2. 标记:包含指定标记的所有注册都会收到通知。

  3. 标记表达式:其标记集与指定表达式匹配的所有注册都会收到通知。

注意

发送特定于平台的有效负载(例如,特定于 Windows 应用商店的通知)时,只有该特定平台的注册才会收到通知。 发送模板通知时,仅针对指定模板的注册。 有关详细信息,请参阅 注册管理

标签

标记可以是任意字符串,最多包含 120 个字符,其中包含字母数字和以下非字母数字字符:“_”、“@”、“#”、“.”、“:”、“-”。 以下示例显示了一个应用程序,可以从中接收有关特定音乐组的 Toast 通知。 在此方案中,路由通知的一种简单方法是使用表示不同带的标记来标记注册,如下图所示。

标记表达式

在此图片中,披头士乐队 标记的消息仅到达注册到披头士乐队 的平板电脑。

有关为标记创建注册的详细信息,请参阅 注册管理

可以使用 SDK 中 Microsoft.ServiceBus.Notifications.NotificationHubClient 类 方法 向标记发送通知。 也可以使用 Node.js或 推送通知 REST API

请注意以下示例:

await hub.SendWindowsNativeNotificationAsync(wnsToast, "tag");
notificationHubService.wns.sendToastText01('tag', {
            text1: 'Hello World!'
        }, callback);

标记不必预先预配,可以引用多个特定于应用的概念。 例如,此示例应用程序的用户可以对乐队进行评论,并希望接收 Toast,不仅针对自己喜欢的乐队的评论,而且对于来自朋友的所有评论,无论他们评论的乐队如何。 下图显示了此方案的示例:

标记表达式

在此图片中,Alice 对披头士乐队的更新感兴趣,Bob 对威勒队的更新感兴趣。 鲍勃也对查理的评论感兴趣,查理对威勒人感兴趣。 当为查理对披头士乐队的评论发送通知时,Alice 和 Bob 都会收到通知。

重要

虽然可以在标记(例如“band_Beatles”或“follows_Chanrlie”)中对多个关注点进行编码,但标记是简单的字符串,而不是具有值的属性。 仅在存在或缺少特定标记时匹配注册。

有关如何使用标记发送到兴趣组的完整分步教程,请参阅 突发新闻

注意

在上一示例中,应将单个通知发送到两个标记(提供标记数组或将标记表达式与 OR 一起使用),而不是两个通知。 向单个标记发送两个通知会导致具有两个标记的注册重复项,而使用标记表达式则不会。

将标记用于目标用户

使用标记的另一种方法是标识特定用户的所有设备。 可以使用包含用户 ID 的标记标记注册,如下图所示:

标记表达式

在此图片中,标记 uid:Alice 的消息到达标记 uid:Alice;因此,Alice 的所有设备。

标记表达式

在某些情况下,通知必须以一组注册为目标,这些注册不是由单个标记标识的,而是由标记上的布尔表达式标识的。

考虑一个体育应用程序,向波士顿的每个人都发送一个提醒,关于红袜队和红衣主教之间的游戏。 如果客户端应用注册了有关团队和位置兴趣的标记,则通知应面向波士顿对红袜队或红衣主教感兴趣的人。 此条件可以用以下布尔表达式表示:

(follows_RedSox || follows_Cardinals) && location_Boston

标记表达式

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

可以使用 SDK 中 Microsoft.ServiceBus.Notifications.NotificationHubClient发送通知 方法将通知发送到标记表达式。 也可以使用 Node.js或 推送通知 REST API。 请注意以下示例:

await hub.SendWindowsNativeNotificationAsync(wnsToast, "(tagA && !tagB)");
notificationHubService.wns.sendToastText01('(tagA && !tagB)', {
            text1: 'Hello World!'
        }, callback);

另请参阅

其他资源

API 参考
突发新闻教程
向用户发送通知教程