3

Я использую Azure Notification Hubs для доставки push-уведомлений на устройства Android и iPhone.Azure Notification Hubs - следует сохранить токен устройства на моем сервере?

Мой общий поток:

1.Every раз, когда пользователь открывает мобильное приложение, вызов сделан на 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); 

Он прекрасно работает, но мой вопрос, я должен отслеживать эти маркеры устройств в моем сервере по какой-то причине? Например, сохраните их в таблице для последующего использования или других сценариев, с которыми я мог столкнуться, или он предназначен для использования таким образом (без сохранения их в таблице).

ответ

6

Ваш код создает много дубликатов, в двух экземплярах я имею в виду разные регистрации с одним и тем же дескриптором PNS (токен устройства APNS или идентификатор регистрации GCM). NH имеет логику устранения дублирования, которая не позволяет вашим устройствам получать несколько копий одного и того же сообщения, но увеличивает внутреннее пространство для хранения и замедляет работу системы.

Так есть рекомендация:

  • На каждом устройстве ваш создавать и хранить некоторые GUID-идентификатор типа;

  • Вы передаете этот идентификатор на сервере вместе с дескриптором PNS;

  • На сервере у вас есть hub.GetRegistrationByTagAsync (deviceGuid, 100);

  • Если регистрация возвращена, то обновите ее с помощью принятой ручки PNS (даже если PNS обрабатывает то же самое - только для предотвращения истечения срока действия);

  • Если результат пуст, тогда вы создаете новое идентификатор GUID GUID для регистрации в качестве тега;

Также существует новый API, который позволяет вам выполнять только один вызов, а не использовать любые теги, если они вам не нужны. https://msdn.microsoft.com/en-us/magazine/dn948105.aspx Посмотрите на тему Корпус 2: задний конец управляет устройствами в концентрационных концентраторах. Это не очень хорошее объяснение, возможно, но функция нова. Если есть какие-либо вопросы об этом API, я могу ответить.

+0

Это выглядит великолепно! Я использовал код AppleRegistrationDescription() так, как есть, не найдя момента, чтобы увидеть, что он фактически создает новую регистрацию каждый раз. Идентификатор GUID, о котором вы упомянули, является userId в моем случае. –

+0

Просто уточнить: что вы имеете в виду под PNS в случае устройства Apple? Это токен устройства? Я прав? –

+0

PNS - система Push Notification (APNS в случае Apple). Ручка PNS - это идентификатор, выданный PNS для устройства (токен устройства в случае Apple). Общие понятия время от времени путают людей, но мы используем их, потому что NH работает с несколькими платформами. – efimovandr

Смежные вопросы