2017-01-04 2 views
2

Простой вопрос, но я подозреваю, что у него нет простого или легкого ответа. Тем не менее, стоит спросить.Запрос конечных точек SNS SNS по данным пользователя

Мы создаем реализацию для push-уведомлений с использованием AWS с нашим веб-сервером, работающим на EC2, отправляя сообщения в очередь на SQS, с которыми связана Lambda, которая отправляется, наконец, в SNS для доставки в iOS/Android-приложения.

Вопрос у меня есть: есть ли способ запросить конечные точки SNS на основе пользовательских данных, которые вы можете предоставить при создании? Единственный способ, с помощью которого я вижу это до сих пор, - перечислить все конечные точки в данном приложении платформы, а затем выполнить поиск по этому списку для пользовательских данных, которые я ищу ... однако, более прямой подход был бы намного лучше ,

Почему я хочу сделать это просто: если бы я мог прикрепить идентификатор пользователя к этим конечным точкам устройства и на основе этого запроса, я мог бы избежать полного сохранения ARN в нашей базе данных DynamoDB. Это сэкономит много времени и сложности внедрения.

Дайте мне знать, что вы думаете, даже если вы считаете, что эта идея непрактична и глупа, или если поиск через них - лучший способ сделать это!

Cheers!

ответ

1

В ListTopics нет возможности иметь предложение «где». Я вижу две возможности:

  1. Создайте новую тему SNS для пользователя, в котором есть идентификатор. Так, например, ARN будет чем-то вроде «arn: aws: sns: us-east-1: 123456789: know-prefix-user-id». Очевидным недостатком является то, что у вас есть потенциал для загрузки лодок SNS.
  2. Используйте сервис, предназначенный для такого использования, как PubNub. Отказ от ответственности - я не работаю для PubNub или собственного фонда, но успешно использовал его в нескольких проектах. Таким образом вы сможете настроить таргетинг на одного или нескольких пользователей.
0

Согласовывающ в [AWS documentation][1], если вы пытаетесь создать новую платформу Endpoint с тем же пользователем данных вы должны получить ответ с исключением, включая ARN, связанный с существующим PlatformEndpoint.

Это определенно не идеальный, но это будет круглый способ запроса атрибутов конечных точек данных пользователя через исключение.

//Query CustomUserData by exception 
    CreatePlatformEndpointRequest cpeReq = new CreatePlatformEndpointRequest().withPlatformApplicationArn(applicationArn).withToken("dummyToken").withCustomUserData("username"); 
    CreatePlatformEndpointResult cpeRes = client.createPlatformEndpoint(cpeReq); 

Вы должны получить исключение с ARN, если конечная точка с тем же withCustomUserData существует.

Тогда вы просто используете этот ARN и уходите.