Mensaje de varias plataformas a través de AWS SNS con aws-ruby-sdk

Estoy tratando de usar el SDK Ruby de Amazon para enviar notificaciones push con atributos adicionales para diferentes plataformas, a saber, APNS y GCM (dispositivos Apple y Android), pero no puedo encontrar una forma de enviar la estructura de mensajes documentada usando la API del SDK.

Para enviar un mensaje con diferentes cargas útiles para GCM y APNS, los documentos que encontré sugieren la siguiente estructura:

{ "APNS": { "aps": { "alert": "someone set us up the bomb" } }, "GCM": { "data": { "message": "we get signal" } } } 

Esperaría que SNS envíe correctamente la carga útil específica de la plataforma a los puntos finales de la plataforma correctos, pero en su lugar el mensaje a, por ejemplo, un dispositivo android, también incluye la carga útil APNS – incluye el cuerpo completo del mensaje.

Así es como envío el mensaje:

 sns = AWS::SNS::Client.new sns.publish( target_arn: endpoint_arn, message: { GCM: ..., APNS: ... }.to_json ) 

La documentación disponible, particularmente para el ruby ​​sdk, no parece ser tan detallada. ¿Estoy incorrecto en mi supuesto de que la carga útil debe distribuirse correctamente dependiendo de la plataforma de punto final? ¿Hay una mejor manera de lograr lo que estoy tratando de hacer?

Probablemente ya has descubierto esto, pero aquí es cómo funciona en PHP. Probablemente la estructura del mensaje es la misma en Ruby:

 publish(array( 'TopicArn' => 'YOUR_TOPIC_ARN', 'Message' => '{ "default": "YOUR_MESSAGE", "email": "YOUR_MESSAGE", "sqs": "YOUR_MESSAGE", "http": "YOUR_MESSAGE", "https": "YOUR_MESSAGE", "sms": "YOUR_MESSAGE", "APNS": "{\"aps\":{\"alert\": \"YOUR_MESSAGE\",\"sound\":\"default\", \"badge\":\"1\"} }", "GCM": "{ \"data\": { \"message\": \"YOUR_MESSAGE\" } }", "ADM": "{ \"data\": { \"message\": \"YOUR_MESSAGE\" } }" }', 'MessageStructure' => 'json' )); 

Vieja historia, pero aquí es cómo me las arreglé para hacerlo, después @ inspiración user3719626:

 client.publish({ target_arn: @endpoint_arn, message: { "default" => "Default message. Used only if the target does not support any other format.", "APNS" => { "aps" => { "alert" => "Whatever!", "url" => "stackoverflow.com", } }.to_json, "GCM" => { "data" => { "message" => "Whatever!", "url" => "stackoverflow.com" } }.to_json, }.to_json, message_structure: 'json', }) 

Notas:

  • client es una instancia de AWS::SNS::Client .
  • @endpoint_arn es una cadena que contiene el identificador ARN de punto final / tema de destino.
  • message debe ser una cadena, y aquí debe ser una cadena JSON.
  • Cada clave de plataforma debe apuntar a una cadena JSON también. Así que cada valor de la plataforma es "JSONified" dos veces.
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.