Amazon SNS: Как получить EndpointArn с помощью токена (registrationId) с помощью amazon.net sdk?
Я пытаюсь получить EndpointArn по идентификатору регистрации с помощью aws.net sdk. Но я не мог найти хороший способ сделать это.
Моя первая попытка заключалась в создании CreatePlatformEndpointRequest с той же регистрацией, которая была зарегистрирована в приложении SNS раньше, отправленной клиентом (android). Таким образом, aws api дает вам EndpointArn для этого регистрационного идентификатора.
Amazon: действие CreatePlatformEndpoint является идемпотентным, поэтому, если запрашивающий уже владеет конечной точкой с тем же токеном и атрибутами устройства, эта конечная точка ARN возвращается без создания новой конечной точки.
Но если вы сохранили что-то в CustomUserData, прежде чем вам нужно будет отправить те же пользовательские данные, чтобы получить конечную точку arn для этого идентификатора регистрации, в противном случае вы получите исключение, как показано ниже.
Недействительный параметр: токен Причина: конечная точка {My Endpoint ARN} уже существует с тем же токеном, но с разными атрибутами.
Я думаю, что буду использовать CreatePlatformEndpoint() без пользовательских данных, и когда мне понадобится Endpoint Arn для регистрации, я запустим CreatePlatFormEndpoint только с этим идентификатором регистрации.
Есть ли другой способ получить EndpointArn маркером лучше, чем решение выше?
Спасибо.
Ответы
Ответ 1
Что мы сделали, так это сохранение ARN конечной точки, возвращаемое из CreatePlatformEndpoint в нашей базе данных приложений. Если у нас уже есть ARN-связь конечной точки для данного идентификатора регистрации устройства, мы вызываем
getEndpointAttributes, проходящие в конечной точке arn из нашей базы данных. Если результат возвращен, мы затем проверяем, включена ли конечная точка, а если нет, то вызовите setEndpointAttributes и установите ключ "Enabled" на "true".
К сожалению, не похоже, что API Amazaon предлагает метод "findBy" для поиска по "CustomUserData" или "Token" и имеет только "список" методов, которые перечисляют все существующие конечные точки, которые для большинства приложений не будут достаточными, если есть потенциально тысячи или миллионы записей. Это почти так, как если бы API был написан только для удовлетворения случаев использования Amazon Console UI.
Кроме того, см. документы Amazon, например, запросы и ответы API
http://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html
http://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html
Ответ 2
Согласно блогу AWS https://mobile.awsblog.com/post/Tx223MJB0XKV9RU/Mobile-token-management-with-Amazon-SNS, они также рекомендуют, чтобы сторона приложения хранила ARN.
retrieve the latest token from the mobile OS
if (endpoint arn not stored)
# first time registration
call CreatePlatformEndpoint
store returned endpoint arn
endif
call GetEndpointAttributes on the endpoint arn
if (getting attributes encountered NotFound exception)
#endpoint was deleted
call CreatePlatformEndpoint
store returned endpoint arn
else
if (token in endpoint does not match latest) or
(GetEndpointAttributes shows endpoint as disabled)
call SetEndpointAttributes to set the
latest token and enable the endpoint
endif
endif