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

Dav*_*han 0 android amazon-sns boto3

使用 .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')
Run Code Online (Sandbox Code Playgroud)

使用 GCM/Firebase 端点执行此操作是行不通的。我尝试了大量的json.dumps()手动引号转义组合。

我希望这个问题可以节省一些人的时间和挫败感。

Dav*_*han 5

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

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

首先,boto3 SNS 文档中的publish() 函数非常混乱:

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

错误的是,GCM(几乎所有 Android 设备都使用的传输协议)不能以这种方式工作!也许应该提到这一点。

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

不可以,您不能使用 JSON 对象作为 Message 参数。参数仍然需要是字符串对象。但它需要包含可解析的 JSON。这应该重新措辞。

Message 参数的值必须:

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

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

这两点都不正确。

json.dumps()此外,没有任何地方提到您需要在 JSON 对象中使用另一个对象。一个像上面这样的简单示例将有助于在该文档中创造奇迹。