按用户数据查询AWS SNS端点

时间:2017-01-04 20:09:47

标签: amazon-web-services amazon-sns

简单的问题,但我怀疑它没有一个简单或简单的答案。仍然值得一提。

我们正在使用AWS创建推送通知的实现,我们的Web服务器在EC2上运行,将消息发送到SQS上的队列,该队列使用Lambda处理,最终发送到SNS以传送到iOS / Android应用。

我的问题是:有没有办法根据您在创建时提供的自定义用户数据来查询SNS端点?到目前为止,我看到这样做的唯一方法是列出给定平台应用程序中的所有端点,然后在该列表中搜索我正在寻找的用户数据......但是,更直接的方法会更好

为什么我想这样做很简单:如果我可以将用户标识符附加到这些设备端点,并基于此进行查询,我可以避免完全将ARN保存到DynamoDB数据库中。这将节省大量的实施时间和复杂性。

让我知道你们的想法,即使你认为这个想法是不切实际和愚蠢的,或者搜索所有这些想法是最好的方法!

干杯!

2 个答案:

答案 0 :(得分:1)

ListTopics中没有“where”子句的能力。我看到两种可能性:

  1. 为每个用户创建一个新的SNS主题,其中包含一些可识别的ID。因此,例如,ARN将类似于“arn:aws:sns:us-east-1:123456789:know-prefix-user-id”。明显的缺点是你有潜力加载SNS主题。
  2. 使用专为此类用法设计的服务,如PubNub。免责声明 - 我不为PubNub或自己的股票工作,但已在多个项目中成功使用它。您将能够以这种方式定位一个或多个用户。

答案 1 :(得分:0)

根据[AWS documentation][1],如果您尝试使用相同的用户数据创建新的平台端点,则应获得一个包含与现有PlatformEndpoint关联的ARN的响应。

这绝对不是理想的,但它将通过异常查询用户数据端点属性。

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

如果存在具有相同withCustomUserData的端点,则应该与ARN发生异常。

然后你只需使用那个ARN就可以了。