Azure 通知中心 - 我应该将设备令牌保存在我的服务器中吗?

Azure Notification Hubs - Should I save the device token in my server?

我正在使用 Azure 通知中心向 android/iPhone 台设备发送推送通知。

我的大体流程是:

1.Every 用户打开移动应用程序时,调用 PNS (APNS/GCM) 并获取更新的设备令牌。
2. 然后将设备令牌发送到服务器。
3、服务端执行以下代码注册token:

RegistrationDescription reg;

if (deviceType == DeviceType.Iphone)
{
    reg = new AppleRegistrationDescription(deviceToken, new string[] { userId.ToString() });
}
else
{
    reg = new GcmRegistrationDescription(deviceToken, new string[] { userId.ToString() });
}

reg = await hub.CreateRegistrationAsync(reg);

效果很好,但我的问题是,我是否应该出于某种原因在我的服务器中跟踪这些设备令牌?例如,将它们保存在 table 中供以后使用或我可能面临的其他情况,或者它打算以这种方式使用(而不将它们保存在 table 中)。

您的代码创建了很多重复项,重复项是指具有相同 PNS 句柄(APNS 设备令牌或 GCM 注册 ID)的不同注册。 NH 具有重复数据删除逻辑,可防止您的设备接收同一消息的多个副本,但它会增加内部存储空间 space 并降低系统速度。

所以有推荐:

  • 在每台设备上创建并存储一些类似 GUID 的标识符;

  • 您将该标识符与 PNS 句柄一起传递到服务器上;

  • 在服务器上你做 hub.GetRegistrationByTagAsync(deviceGuid, 100);

  • 如果注册返回,则用收到的 PNS 句柄更新它 (即使 PNS 处理相同 - 只是为了防止过期);

  • 如果结果为空,则创建新注册并将设备 GUID 指定为标签;

还有一个新的 API,它允许您只执行一次调用,并且在不需要时不使用任何标签。 https://msdn.microsoft.com/en-us/magazine/dn948105.aspx 查看主题案例 2:后端管理通知中心中的设备。这可能不是很好的解释,但功能是新的。如果有任何关于 API 的问题,我可以回答。