当前位置: 首页 > 知识库问答 >
问题:

Amazon SNS:如何使用Amazon.net sdk通过令牌(注册ID)获取EndpointArn?

芮立果
2023-03-14

我试图通过注册ID使用aws. net sdk获得Endpoint Arn。但是我找不到一个好的方法来做这件事。

我的第一次尝试是运行CreatePlatformEndpoint请求与相同的注册ID,这是注册到SNS应用程序之前,由客户端(Android)发送。通过这种方式,aws api将为您提供此注册ID的Endpoint Arn。

Amazon:CreatePlatformEndpoint操作是幂等的,因此如果请求者已经拥有一个具有相同设备令牌和属性的endpoint,那么将返回该endpoint的ARN,而不创建新endpoint。

但是,如果您在需要发送相同的用户数据以获取此注册ID的endpointarn之前将某些内容存储到CustomUserData,否则会出现如下所示的异常。

无效参数:令牌原因:endpoint{My Endpoint ARN}已存在,具有相同的令牌,但具有不同的属性。

我想我将在没有用户数据的情况下使用CreatePlatformEndpoint(),当我需要注册id的endpointArn时,我将仅使用此注册id运行CreatePlatformEndpoint。

有没有比上述解决方案更好的方法通过令牌获取EndpointArn?

非常感谢。

共有2个答案

宋经赋
2023-03-14

根据AWS的博客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
唐彦
2023-03-14

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

从我们的数据库传递endpointarn的getEndpoint属性。如果返回结果,我们将检查终结点是否被标记为启用,如果没有,则调用setEndpoint属性并将键“启用”设置为“true”。

不幸的是,亚马逊应用编程接口似乎没有提供通过“自定义用户数据”或“令牌”查找的“findBy”方法,只有列出所有现有endpoint的“列表”方法,对于大多数应用程序来说,如果有数千或数百万个条目,这些endpoint是不够的。这几乎就好像API只是为了满足Amazon ConsoleUI用例而编写的。

此外,请参阅Amazon文档,例如API请求和响应

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

 类似资料:
  • 我想使用亚马逊 SNS 服务向Android设备发送推送通知。 但正如亚马逊官方网站上列出的: 您可以使用以下受支持的推送通知服务之一向移动设备和台式机发送推送通知消息: 亚马逊设备消息(ADM) 适用于iOS和Mac OS X的Apple推送通知服务(APNS) 百度云推送(百度) 适用于Android的谷歌云消息传递(GCM) 适用于Windows Phone的Microsoft推送通知服务(

  • 我正在写一个小小的短信网关,供几个项目使用, 我实现了laravel passport身份验证(客户端凭据授予令牌) 然后,我向api中间件组添加了: 逻辑工作正常,现在在我的控制器中,我需要让客户机与有效令牌关联。 routes.php 出于明显的安全原因,我无法将客户端id与消费者请求一起发送,例如,

  • 我需要获取GCM推送通知实施的注册Id?因为我使用的是GoogleCloudMessaging类,但我没有获得ID。

  • 如何通过提供已配置用户的用户名和密码获得AWS令牌表单? 我想做的是有一个URL,它接受user/pass作为postparams并返回一个令牌。这里记录的三个“允许的OAuth流”都没有这个或任何其他网址 编辑:邮递员怎么做?我正在寻找类似于: 调用aws url并为池中的某个用户提供user/Pass AWS返回一个令牌 包括令牌与资源服务器的每个请求 资源服务器验证令牌

  • 我正在从事一个需要oauth2令牌才能进行通信的项目。后端给了我一个curl命令,但我不知道如何在Unity中将其转换为WWW格式,因为我以前没有使用http或json文件的经验。你能帮我取一下代币吗?谢谢下面是curl代码的样子: $curl-v-u{CLIENT_ID}:{CLIENT_SECRET}”https://api.domo.com/oauth/token?grant_type=cl

  • 我正在编写一个应用程序,调用来自Flutter的google fit rest api。 我需要使用(https://pub.dev/packages/google_sign_in)与谷歌签名。我可以毫无问题地获得一个令牌(见是否有人设法从谷歌登录(Flutter)获得id令牌),但如何获得一个新的令牌时,它是过期的? 我不想要求用户每小时登录并获得一个新的令牌