在描述注册管理的article中,它指出:
以下是使用安装的一些关键优势:
创建或更新安装是完全幂等的。因此,您可以重试它,而无需担心重复注册
它究竟意味着什么?我认为这并不意味着安装具有与注册不同的'CreateOrUpdate',因为那里也存在类似的方法 - 'CreateOrUpdateRegistrationAsync'。
假设我创建了两个具有不同安装ID的安装,但两个安装中都存在相同的PNS句柄(pushChannel
属性)和相同的标记'foo'。我将使用SendTemplateNotificationAsync
方法使用'foo'标签发送通知,以选择我的通知目标。
它将匹配我的两个安装,因为它们都包含标签'foo',并且两者都具有相同的PNS句柄。设备是否会收到两个通知,或者Azure是否会阻止在这种情况下传递重复项?
在同一篇文章中,我链接了代码示例,检查现有注册与即将注册的PNS句柄:
// make sure there are no existing registrations for this push handle (used for iOS and Android)
string newRegistrationId = null;
var registrations = await hub.GetRegistrationsByChannelAsync(pushChannel.Uri, 100);
但他们没有在安装示例中检查,这再次暗示Azure阻止传递重复通知。
创建或更新安装是完全幂等的。因此,您可以重试它,而无需担心重复注册
这里,installation
是用于描述增强注册(使用Azure的通知中心)以将设备的PNS与标签和/或模板相关联的术语。这里使用“幂等”来表达这种installation
的行为。
这意味着您可以在每次启动应用程序时为此类注册调用相同的代码,或者将其置于前台,而无需担心处理PNS中的更改或以前使用通知中心注册的状态。
这很好,因为经典的registration
模型可能会导致通知中心中同一设备和用户的重复注册。 Installation
模型不这样做。
问:当您将一个PNS分配给通知中心中具有相同标记的多个注册并且您尝试通过定位标记来推送通知时会发生什么? 答:Azure通知中心具有重复数据删除逻辑,可防止重复通知发出。
问:如果您有多个应用程序而只有一个通知中心,您是否可以以任何方式强制执行多个通知(对于相同的标记)?
答:如果可以获得多个设备令牌,则可以。但是,对于iOS,由于APNS一次只发出一个有效的设备令牌,因此无法实现。此外,iOS应用程序有自己的包标识符,因此也有自己的特定推送证书。并且,通知中心不支持多个证书。但是在Android的情况下,如果您使用registration
模型并使用较旧的GCM注册ID,则可以强制它,因为它们经常更新并且不会如此容易过期。
希望有所帮助!干杯!