如何使用boto3客户端通过GCM/Firebase将推送消息发送到Android设备发布(AWS SNS)
问题描述:
通过AWS管理控制台发送推送消息可以很好地使用JSON message generator
。但是每当我打电话给publish()
功能时,消息都不会到达手机。如何使用boto3客户端通过GCM/Firebase将推送消息发送到Android设备发布(AWS SNS)
发布到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 /火力地堡端点是行不通的。我尝试了一个荒谬的数额json.dumps()
或手动引号逃脱组合。
我希望这个问题可以节省一些时间和挫折。
答
的发布调用的实际工作需要二嵌套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是非常令人迷惑:
如果你想发送相同的消息给所有传输协议,将消息的文本包含为字符串值。
错误的GCM是一种几乎所有的Android设备都使用的传输协议,不会这样工作!也许这应该提到。
如果要为每个传输协议发送不同的消息,设置MessageStructure参数的值,以JSON 并使用JSON对象的消息参数。
不,您不能使用JSON对象作为Message参数。该参数仍然需要是一个字符串对象。但它需要包含可分析的JSON。这应该重新编写。
消息参数必须的值:
是语法上有效的JSON对象;和
至少包含顶级JSON密钥“default”,其值为字符串。
这两点都不是真的。
此外,您在JSON对象内需要另一个json.dumps()
这一事实并未提及。一个简单的例子就像上面的那个例子会在那个文档中产生奇迹。