如何用AmazonSNS .NET客户端发送不含default的自定义Payload至平台端点ARN
解决方案:直接发送FCM原生负载到平台端点
当你发送消息到单个FCM平台端点ARN时,不需要启用MessageStructure="json"的多平台消息模式(该模式仅适用于主题订阅多种平台的场景,强制要求default字段)。正确做法是直接将FCM原生负载字符串作为Message参数发送,无需外层JSON包装。
具体实现步骤
- 构造FCM原生data负载字符串(和你在控制台中填入的
GCM字段内容一致):"{ \"data\": { \"MyTitle\": \"Sample endpoints\", \"MyMessage\": \"Important\" } }" - 创建
PublishRequest时,仅指定TargetArn(你的平台端点ARN)和Message(上述负载字符串),不要设置MessageStructure属性 - 调用SNS客户端的
Publish方法发送
完整代码示例(C#)
using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; var snsClient = new AmazonSimpleNotificationServiceClient(); // 构造FCM原生data负载 string fcmPayload = "{ \"data\": { \"MyTitle\": \"Sample endpoints\", \"MyMessage\": \"Important\" } }"; var publishRequest = new PublishRequest { TargetArn = "你的FCM平台端点ARN", Message = fcmPayload // 注意:不要设置MessageStructure属性 }; var response = await snsClient.PublishAsync(publishRequest);
为什么控制台能正常工作?
你在控制台选择「按传输协议自定义负载」发送到平台端点时,SNS后台会自动识别目标端点的平台类型(此处为FCM/GCM),直接将你输入的负载作为原生消息发送,没有启用多平台消息结构,因此不需要default字段。而之前设置MessageStructure="json"时,SNS会强制按照多平台消息格式处理,自动添加default包裹,导致不符合预期。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

