如何使用boto3客户端发布(AWS SNS)通过GCM / Firebase将推送消息发送到Android设备

时间:2017-09-13 13:48:25

标签: android boto3 amazon-sns

通过AWS管理控制台发送推送消息可以正常使用JSON message generator。但每当我呼叫publish()功能时,该消息永远不会到达手机。

发布到iOS可以正常工作:

import boto3

client = boto3.client('sns', region_name=REGION_NAME)
client.publish(TargetArn=SOME_VALID_ARN, Message='This message gets pushed to iOS')

使用GCM / Firebase端点执行此操作无效。我尝试了一大堆json.dumps()或手动引号逃避组合。

我希望这个问题可以节省一些时间和挫折。

1 个答案:

答案 0 :(得分:1)

实际运作的发布调用需要两个嵌套json.dumps

client.publish(TargetArn=ARN, MessageStructure='json', Message=json.dumps({'GCM': json.dumps('This finally gets delivered to Android')}))

首先,the boto3 SNS documentation of the publish() function非常令人困惑:

  

如果要将相同的消息发送到所有传输协议,请将消息文本包含为字符串值。

错了,几乎所有Android设备都使用的传输协议GCM不能这样工作!也许这应该被提及。

  

如果要为每个传输协议发送不同的消息,请将MessageStructure参数的值设置为json ,并使用JSON对象作为Message参数

不,您不能将JSON对象用于Message参数。该参数仍然需要是一个字符串对象。但它需要包含可解析的JSON。这应该改写。

  

Message参数的值必须:

     
      
  • 是一个语法上有效的JSON对象;以及

  •   
  • 至少包含一个“default”的顶级JSON键,其值为字符串。

  •   

这两点都不正确。

此外,在JSON对象中需要另一个json.dumps()这一事实无处可寻。像上面这样一个简单的例子可以帮助那些文档中的奇迹。