Amazon SNS CreatePlatformApplication在重用平台应用程序时返回错误

dl_*_*l__ 6 boto amazon-web-services amazon-sns

我的代码工作正在为每条消息创建一个新的平台应用程序.我认为这很浪费,所以我尝试更改代码以用于list_platform_applications获取可用的应用程序并重用具有正确名称的部分(部分PlatformApplicationArn).

当突然我将从以下错误中获取此错误时,这将适用于连续的几条消息CreatePlatformApplication:

{"错误":{"代码":"InvalidParameter","消息":"无效参数:此端点已使用其他令牌注册.","类型":"发件人"},"RequestId":"06bd3443- 598e-5c06-9f5c-7f84349ea067" }

这甚至没有意义.我正在创建一个端点.我没有通过.它是否真的抱怨它返回的端点.

根据亚马逊文档:

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

所以在我看来,如果有合适的,它将被退回.否则,创造一个全新的.

我错过了什么吗?

ale*_*kop 4

哦该死。我想我找到了这种行为的原因。遇到这个问题后,我确保每个令牌只上传到 AWS SNS一次。在测试这个时,我意识到尽管如此,我最终还是得到了具有相同令牌的多个端点 - 嗯???事实证明,这些重复的令牌是由于将过时的令牌上传到 AWS SNS 造成的。使用过时的令牌创建端点后,SNS 会通过使用当前设备令牌更新端点来自动恢复端点(一旦您尝试将推送消息发送到过时的令牌,该令牌就会从 GCM 传回作为规范 ID)。

例如上传这些(虚构的)令牌和自定义数据

APA9...YFDw, {original_token: APA9...YFDw}
APA9...XaSd, {original_token: APA9...XaSd} <-- Assume this token is outdated
APA9...sVQa, {original_token: APA9...sVQa}
Run Code Online (Sandbox Code Playgroud)

可能会导致类似这样的结果 - 即具有相同令牌的不同端点:

APA9...YFDw, {original_token: APA9...YFDw}, arn:aws:sns:eu-west-1:4711:endpoint/GCM/myapp/daf64...5c204
APA9...YFDw, {original_token: APA9...XaSd}, arn:aws:sns:eu-west-1:4711:endpoint/GCM/myapp/a980f...e3c82 <-- Duplicate token!
APA9...sVQa, {original_token: APA9...sVQa}, arn:aws:sns:eu-west-1:4711:endpoint/GCM/myapp/14777...7d9ff
Run Code Online (Sandbox Code Playgroud)

这种情况反过来似乎会导致后续尝试使用过时的令牌创建端点时出现上述错误。从另一方面来看,后续请求失败似乎是正确的。另一方面,直觉上我有一种直觉,正在发生的令牌重复似乎是错误的,或者至少难以处理。也许一旦 SNS 发现令牌已过时并且需要更改,它可以首先检查是否已经存在具有相同令牌的另一个端点......

我会对此进行更多研究,看看是否能找到一种方法来正确处理这个问题。

干杯