sns notification example apple .net amazon-web-services push-notification google-cloud-messaging amazon-sns

notification - Amazon SNS: ¿Cómo obtener EndpointArn por token(registrationId) usando amazon.net sdk?



amazon sns push notifications (2)

De acuerdo con el blog de AWS en https://mobile.awsblog.com/post/Tx223MJB0XKV9RU/Mobile-token-management-with-Amazon-SNS , también recomiendan que las aplicaciones guarden el 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

Estoy intentando obtener EndpointArn mediante el ID de registro utilizando aws .net sdk. Pero no pude encontrar una buena manera de hacerlo.

Mi primer intento fue ejecutar CreatePlatformEndpointRequest con el mismo ID de registro, que está registrado en la aplicación SNS antes, enviado por el cliente (Android). De esta manera, aws api le da el EndpointArn para este ID de registro.

Amazon : la acción CreatePlatformEndpoint es idempotente, por lo que si el solicitante ya posee un punto final con el mismo token y atributos del dispositivo, el ARN del punto final se devuelve sin crear un nuevo punto final.

Pero si almacenó algo en CustomUserData antes de que necesite enviar los mismos datos de usuario para obtener el punto final para este ID de registro, de lo contrario, obtendrá una excepción como la que se muestra a continuación.

Parámetro no válido: Razón del token: El punto final {My Endpoint ARN} ya existe con el mismo token, pero con atributos diferentes.

Creo que voy a usar CreatePlatformEndpoint () sin datos de usuario y cuando necesito Endpoint Arn para un registro, ejecutaré CreatePlatFormEndpoint solo con este ID de registro.

¿Hay otra forma de obtener EndpointArn por token mejor que la solución anterior?

Gracias.


Lo que hicimos fue almacenar el ARN de punto final devuelto desde CreatePlatformEndpoint en nuestra base de datos de aplicaciones. Si ya tenemos una asociación de ARN de punto final para un ID de registro de dispositivo dado, entonces llamamos

getEndpointAttributes que pasan en el punto final arn de nuestra base de datos. Si se devuelve un resultado, luego verificamos si el punto final está marcado como habilitado y, si no, llamamos a setEndpointAttributes y establecemos la clave "Habilitado" en "verdadero".

Desafortunadamente, no parece que la API de Amazaon ofrezca un método "findBy" para buscar por "CustomUserData" o "Token" y solo tiene métodos de "lista" que enumeran todos los puntos finales existentes que para la mayoría de las aplicaciones no serán suficientes si existen Miles o millones de entradas. Es casi como si la API se escribiera solo para satisfacer los casos de uso de la IU de Amazon Console.

Además, vea documentos de Amazon, por ejemplo, solicitudes de API y respuestas

http://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html http://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html