AmazonSNS:如何使用Amazon.NETSDK通过令牌获得EndpointArn(注册ID)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

我试图通过注册ID使用aws .net sdk来获得EndpointArn。但我找不到一个好方法来做到这一点。

我的第一个尝试是运行CreatePlatformEndpointRequest,它具有相同的registrationId,它在客户端(android)发送之前已注册到SNS应用程序。通过这种方式,aws api为您提供此注册ID的EndpointArn。

CreatePlatformEndpoint操作是幂等的,因此如果请求者已拥有具有相同设备令牌和属性的端点,则返回该端点的ARN而不创建新的端点。

但是,如果在需要发送相同的用户数据以获取此注册ID的端点arn之前,您将某些内容存储到CustomUserData中,否则您将得到如下的异常。

无效的参数:令牌原因:端点{我的端点ARN}已经存在相同的令牌,但具有不同的属性。

我想我将使用CreatePlatformEndpoint()没有用户数据,当我需要一个registrationId的Endpoint Arn时,我只会使用此注册ID运行CreatePlatFormEndpoint。

是否有另一种方法可以比上述解决方案更好地通过标记获得EndpointArn?

提问于
用户回答回答于

根据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
用户回答回答于

我们所做的是将从CreatePlatformEndpoint返回的端点ARN存储在我们的应用程序数据库中。如果我们已经有一个终端ARN关联给定的设备注册ID,我们然后调用

getEndpointAttributes从我们的数据库传入端点arn。如果返回结果,我们检查端点是否被标记为启用,如果不是,则调用setEndpointAttributes并将“Enabled”键设置为“true”。

不幸的是,它看起来并不像Amazaon API提供的“findBy”方法来查找“CustomUserData”或“Token”,并且只有列表方法列出所有现有的端点,如果有潜在的潜在的应用程序数千或数百万条目。这几乎就像编写API只是为了满足亚马逊控制台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

扫码关注云+社区