Push notification Azure通知集线器-我应该在服务器中保存设备令牌吗?

Push notification Azure通知集线器-我应该在服务器中保存设备令牌吗?,push-notification,apple-push-notifications,google-cloud-messaging,azure-notificationhub,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(deviceToke

我正在使用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);

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

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

因此,有人建议:

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

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

  • 在服务器上执行hub.GetRegistrationByTagAsync(deviceGuid,100)

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

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


还有一个新的API,它允许您只进行一次调用,如果您不需要任何标记,则不使用任何标记。请看主题案例2:后端管理通知中心中的设备。这可能不是很好的解释,但功能是新的。如果有任何关于API的问题,我可以回答

这看起来很棒!我按原样使用了AppleRegistrationDescription()代码,没有花一点时间去看它每次都实际创建了一个新的注册。在我的例子中,你提到的类似GUID的标识符就是用户ID。只是想澄清一下:对于苹果设备,你在PNS下的意思是什么?那是设备令牌吗?我说的对吗?PNS是推送通知系统(APNS在苹果的情况下)。PNS句柄是PNS为设备颁发的标识符(对于Apple,为设备令牌)。一般概念有时会让人困惑,但我们之所以使用它们,是因为NH可以与多个平台协同工作。