我试图一次性向多个设备发送推送通知。为此,我做了以下事情:
我正在尝试向我的应用发送自定义JSON。内容是:
{"APNS_SANDBOX":"{\"aps\":\"{\\\"u\\\":\\\"1\\\"}\"}"}
尽管如此,我在发送JSON时遇到InvalidParameter错误。错误细节是
"消息结构 - JSON消息正文中没有默认条目"
奇怪的是,发送到单个设备(发布到endpointarn)的相同JSON正在运行。
这是我的代码:
AmazonSimpleNotificationServiceClient client = new AmazonSimpleNotificationServiceClient(ssAmazonToken.ssSTAmazonToken.ssAccessKey, ssAmazonToken.ssSTAmazonToken.ssSecretKey, solveRegionEndpoint(ssRegionEndpoint));
//create topic
CreateTopicRequest topicRequest = new CreateTopicRequest();
string topicName = Guid.NewGuid().ToString();
topicRequest.Name = topicName;
log(ssIsDebugMode, "Name (" + topicRequest.Name + ")", module);
CreateTopicResponse topicResponse = client.CreateTopic(topicRequest);
ssTopicArn = topicResponse.TopicArn;
//subscribe endpoints to the topic
foreach(RCAmazonSNSDeviceRecord endpoint in ssDevices)
{
SubscribeRequest subscribeRequest = new SubscribeRequest();
subscribeRequest.TopicArn = topicResponse.TopicArn;
subscribeRequest.Endpoint = endpoint.ssSTAmazonSNSDevice.ssEndpointArn;
subscribeRequest.Protocol = "application";
log(ssIsDebugMode, "TopicArn (" + subscribeRequest.TopicArn + ") "
+ "Endpoint (" + subscribeRequest.Endpoint + ") "
+ "Protocol (" + subscribeRequest.Protocol + ") ", module);
SubscribeResponse subscribeResponse = client.Subscribe(subscribeRequest);
/*ConfirmSubscriptionRequest confirmSubsRequest = new ConfirmSubscriptionRequest();
confirmSubsRequest.AuthenticateOnUnsubscribe = true;
confirmSubsRequest.TopicArn = topicResponse.TopicArn;*/
}
//publish message to the topic
PublishRequest publishRequest = new PublishRequest();
publishRequest.TopicArn = topicResponse.TopicArn;
publishRequest.MessageStructure = ssIsJSON ? "json" : "";
publishRequest.Message = ssMessageContent;
log(ssIsDebugMode, "TargetArn (" + publishRequest.TargetArn + ") "
+ "MessageStructure (" + publishRequest.MessageStructure + ") "
+ "Message (" + publishRequest.Message + ") ", module);
PublishResponse response = client.Publish(publishRequest);
ssAmazonResponse.ssSTAmazonResponse.ssResponseCode = response.HttpStatusCode.ToString();
ssMessageId = response.MessageId;
ssContentLength = response.ContentLength.ToString();
答案 0 :(得分:1)
如果您将"default"
设置为Message
,则SNS要求MessageStructure
JSON中有一个名为json
的顶级属性,其中包含默认协议的字符串值。来自Publish
API documentation(强调我的):
MessageStructure
如果要发送,请将
MessageStructure
设置为json
每个协议的不同消息。例如,使用一个发布 动作,你可以发短信给你的短信用户和一个 邮件订阅者的邮件时间更长如果设置MessageStructure
到json
,Message参数的值必须为:
- 是一个语法上有效的JSON对象;
- 并且至少包含一个“default”的顶级JSON键,其值为字符串。
您可以定义其他顶级键,用于定义要发送到特定传输协议的消息(例如“http”)。
有关为每个协议发送不同消息的信息 使用AWS管理控制台,转到Amazon Simple Notification Service Getting中的Create Different Messages for Each Protocol 入门指南。
有效值:json
类型:字符串
必填:否
答案 1 :(得分:0)
因此,在向主题发送SNS通知时,无法保证所有订阅者都使用APNS消息服务。 因此,SNS要求您还要包含默认' JSON中的字段传递给它。此默认字段将用于不属于APNS消息传递服务的每个其他订户。
因此,在这种情况下,您需要添加另一个JSON元素,以便在有非APNS订阅者时可以使用默认消息。
{ "默认":"在此处输入默认消息", " APNS_SANDBOX":" {\" aps \":\" {\\" u \\":\\&# 34; 1 \\"} \"}" }
在此页面底部可以找到更多示例: http://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-custommessage.html