【问题标题】:Query AWS SNS Endpoints by User Data按用户数据查询 AWS SNS 终端节点
【发布时间】:2017-01-07 04:05:26
【问题描述】:

简单的问题,但我怀疑它没有简单或容易的答案。不过,值得一问。

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

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

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

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

干杯!

【问题讨论】:

    标签: amazon-web-services amazon-sns


    【解决方案1】:

    无法在 ListTopics 中使用“where”子句。我看到了两种可能性:

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

    【讨论】:

      【解决方案2】:

      根据[AWS documentation][1],如果您尝试使用相同的用户数据创建新的 Platform Endpoint,您应该会收到包含与现有 PlatformEndpoint 关联的 ARN 的异常的响应。

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

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

      如果存在具有相同 withCustomUserData 的端点,则 ARN 应该会出现异常。

      然后您只需使用该 ARN 即可。

      【讨论】:

      • 您可以创建具有相同用户数据的用户,因此在创建具有相同用户名的端点时测试错误不起作用。
      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2017-11-01
      • 2016-01-18
      • 2021-04-06
      • 1970-01-01
      • 2012-03-30
      • 2018-11-30
      相关资源
      最近更新 更多