我正在使用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);
效果很好,但我的问题是,我是否应该出于某种原因在我的服务器中跟踪这些设备令牌?例如,将它们保存在表中供以后使用或我可能面临的其他场景,或者它打算使用这种方式(不将它们保存在表格中)。
答案 0 :(得分: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有任何疑问,我可以回答。