2017-09-13 72 views
0

通过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()或手动引号逃脱组合。

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

回答

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是非常令人迷惑:

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

错误的GCM是一种几乎所有的Android设备都使用的传输协议,不会这样工作!也许这应该提到。

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

不,您不能使用JSON对象作为Message参数。该参数仍然需要是一个字符串对象。但它需要包含可分析的JSON。这应该重新编写。

消息参数必须的值:

  • 是语法上有效的JSON对象;和

  • 至少包含顶级JSON密钥“default”,其值为字符串。

这两点都不是真的。

此外,您在JSON对象内需要另一个json.dumps()这一事实并未提及。一个简单的例子就像上面的那个例子会在那个文档中产生奇迹。

相关问题