sns notification nodejs aws apple node.js amazon-web-services apple-push-notifications amazon-sns

nodejs - ¿Alguien que use Node.js con Amazon SNS y Apple Push Notifications?



apple push notification service sns (3)

Estoy buscando ejemplos de uso de node.js con Amazon SNS y notificaciones push de Apple APN. Usamos Amazon para nuestro alojamiento, y he usado SNS antes, es bastante simple. Pero los ejemplos que tienen para las notificaciones push son para java, y no hay ejemplos para Node. Es confuso, como de costumbre con ellos, y espero recortar mi investigación y pasar poco tiempo. No puede ser tan difícil. También me pregunto cómo lidiar con los errores, y las diferencias entre la zona de pruebas y la producción. Apple reacciona de manera diferente entre los dos entornos, no fallando en la caja de arena como lo hacen en la producción.


Al final no es tan difícil, solo descubrir que la documentación es desagradable. Debe crear el punto final principal para el tema SNS en la consola, por lejos, la forma más fácil, incluida la carga del certificado. Luego utilizó createPlatformEnpoint para crear un punto final para cada ID de dispositivo. Eso devuelve otro tema SNS, específico para ese dispositivo, que luego usas para enviar el mensaje.

Por lo tanto, lo siguiente funciona para enviar un solo mensaje a un solo cliente. Si quieres enviar algo en masa, no estás seguro de poder hacerlo. Además, no está seguro de cómo lidiar con los comentarios de Apple, que se supone que debe verificar para los envíos fallidos.

config = require("./config.js").config; var token = "1234567898123456789"; var AWS = require(''aws-sdk''); AWS.config.update({accessKeyId: config.AWSAccessKeyId, secretAccessKey: config.AWSSecretKey}); AWS.config.update({region: config.AWSRegion}); var sns = new AWS.SNS(); var params = {''PlatformApplicationArn'':config["AWSTargetARN"],''Token'':token}; var message = ''Test''; var subject = ''Stuff''; sns.createPlatformEndpoint(params,function(err,EndPointResult) { var client_arn = EndPointResult["EndpointArn"]; sns.publish({ TargetArn: client_arn, Message: message, Subject: subject}, function(err,data){ if (err) { console.log("Error sending a message "+err); } else { console.log("Sent message: "+data.MessageId); } }); });


Es bastante sencillo como señaló CargoMeister.

He escrito una entrada de blog sobre cómo configurarla. Compruébala aquí http://evanshortiss.com/development/mobile/2014/02/22/sns-push-notifications-using-nodejs.html

También tengo un módulo contenedor Node.js que es más fácil de usar que el AWS SDK, ya que he trabajado en torno a la documentación. Es compatible con los Servicios Push de iOS y Android (como eso es todo con lo que he probado / trabajado), administra formatos de mensajes distintos de Cadenas y expone eventos: https://npmjs.org/package/sns-mobile

No he usado temas para administrar los puntos finales, aunque no estoy seguro de que sea un problema. Simplemente crea PlatformEndpoints primero a través de la consola SNS.


var AWS = require(''aws-sdk''); var express = require(''express''); var app = express(); AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: ''add IdentityPoolId'' }); AWS.config.region = ''add region''; var sns = new AWS.SNS(); sns.createPlatformEndpoint({ PlatformApplicationArn: ''add platform application arn'', Token: ''add device token'' }, function (err, data) { if (err) { console.log("errorMessage" + err.stack); return; } var endpointArn = data.EndpointArn; var payload = { default: ''Hello World'', APNS: { aps: { alert: ''Hello World'', sound: ''default'', badge: 1 } } }; // first have to stringify the inner APNS object... payload.APNS = JSON.stringify(payload.APNS); // then have to stringify the entire message payload payload = JSON.stringify(payload); console.log(''sending push''); sns.publish({ Message: payload, MessageStructure: ''json'', TargetArn: endpointArn }, function (err, data) { if (err) { console.log(err.stack); return; } console.log(''push sent''); console.log(data); }); }); var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at http://%s:%s", host, port) })