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

Yar*_*evi 4 push-notification apple-push-notifications google-cloud-messaging azure-notificationhub

我正在使用Azure通知中心向Android/iPhone设备发送推送通知.

我的总体流程是:

1.每次用户打开移动应用程序时,都会向PNS(APNS/GCM)发出呼叫并获取更新的设备令牌.
2.然后将设备令牌发送到服务器.
3.服务器执行以下代码来注册令牌:

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);
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我的问题是,我是否应该出于某种原因在我的服务器中跟踪这些设备令牌?例如,将它们保存在一个表中供以后使用或我可能面临的其他场景,或者它打算使用这种方式(不将它们保存在表中).

efi*_*ndr 5

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

所以有建议:

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

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

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

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

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

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