通过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()
或手动引号逃避组合。
我希望这个问题可以节省一些时间和挫折。
答案 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()
这一事实无处可寻。像上面这样一个简单的例子可以帮助那些文档中的奇迹。