2015-02-19 6 views
1

Я пытаюсь отправить push-уведомления нескольким устройствам одним выстрелом. Для этого, я делаю следующее:Amazon SNS - Отправка push-уведомлений нескольким устройствам

  • элемент списка
  • создать тему
  • подписываться все устройства, я хочу эту тему
  • опубликовать сообщение в этой теме

Я пытаюсь отправить пользовательский JSON в свои приложения. Содержание:

{"APNS_SANDBOX":"{\"aps\":\"{\\\"u\\\":\\\"1\\\"}\"}"} 

Хотя, я получаю ошибку InvalidParameter, отправляющую JSON. Деталь ошибка

«Структура сообщений - запись по умолчанию нет в JSON теле сообщения»

странное дело в том, что тот же JSON послал к одному устройству (издательским к endpointarn) работает ,

Вот мой код:

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

SNS требует, чтобы быть главным атрибутом уровня с именем "default" в Message JSON со значением строки для протокола по умолчанию, если вы установите MessageStructure в json. Из Publish API documentation (курсив мой):

MessageStructure

Установите MessageStructure в json, если вы хотите отправить другое сообщение для каждого протокола. Например, используя одно из опубликованных действий , вы можете отправить короткое сообщение своим подписчикам SMS и длинное сообщение вашим подписчикам электронной почты. Если вы установите MessageStructure в json, значение параметра сообщения должно:

  • быть синтаксически допустимый объект JSON;
  • и содержать по крайней мере ключ JSON верхнего уровня «по умолчанию» со значением, которое является строкой.

Вы можете определить другие ключи верхнего уровня, которые определяют сообщение, которое вы хотите отправить, на конкретный транспортный протокол (например, «http»).

Для получения информации об отправке различных сообщений для каждого протокола с помощью консоли управления AWS, перейдите к Create Different Messages for Each Protocol в Simple Service Notification Amazon Getting Started Guide .

Допустимое значение: JSON

Тип: String

Обязательный: Нет

+0

Спасибо :) (извините за огромные задержки) – user3609216

0

Таким образом, при отправке уведомления о SNS к теме, нет никакой гарантии, что все абоненты используют службы обмена сообщениями APNS , Из-за этого SNS требует, чтобы вы также включили поле «по умолчанию» в переданном JSON. Это поле по умолчанию будет использоваться для каждого другого абонента, который не попадает в службу обмена сообщениями APNS.

Так что в этом случае вам нужно добавить еще один элемент JSON, чтобы имелось сообщение по умолчанию, если есть подписчик без APNS.

{ "по умолчанию": "Введите текст сообщения по умолчанию здесь", "APNS_SANDBOX": "{\" АПС \ ": \" {\\ "и \\" \\ "\\ 1"} \ «}»}

еще несколько примеров можно найти в нижней части этой страницы здесь: http://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-custommessage.html

+0

Спасибо :) (извините за огромные задержки) – user3609216

Смежные вопросы