Skip to content

Instantly share code, notes, and snippets.

@dreadjr
Forked from tmarshall/aws-sns-example.js
Last active April 13, 2016 23:19
Show Gist options
  • Save dreadjr/4187dc928ec8fe2ee1946a820160e308 to your computer and use it in GitHub Desktop.
Save dreadjr/4187dc928ec8fe2ee1946a820160e308 to your computer and use it in GitHub Desktop.
aws-sdk sns example, in Node.js
var AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: '{AWS_KEY}',
secretAccessKey: '{AWS_SECRET}',
region: '{SNS_REGION}'
});
var sns = new AWS.SNS();
sns.createPlatformEndpoint({
PlatformApplicationArn: '{APPLICATION_ARN}',
Token: '{DEVICE_TOKEN}',
CustomUserData: 'STRING_VALUE'
}, function(err, data) {
if (err) {
console.log(err.stack);
return;
}
var endpointArn = data.EndpointArn;
var params = {
Protocol: 'application', /* required */
TopicArn: 'STRING_VALUE', /* required */
Endpoint: endpointArn
};
sns.subscribe(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
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);
});
});
exports.registerDeviceWithSNS = function (topicArn, applicationArn, deviceToken, sns) {
console.log(`AWS Helper registering device`);
return new Promise((resolve, reject) => {
const endpointParams = {
PlatformApplicationArn: applicationArn, /* required */
Token: deviceToken /* required */
};
sns.createPlatformEndpoint(endpointParams, function(err, data) { // eslint-disable-line
if (err) {
console.log('new platform endpoint creation failure');
console.log(err);
reject(err);
} else {
console.log('new platform endpoint creation success');
console.log(data);
const params = {
Protocol: 'application', /* required */
TopicArn: topicArn, //eslint-disable-line
Endpoint: data.EndpointArn /* required */
};
sns.subscribe(params, function (err, data) { // eslint-disable-line
if (err) {
console.log('Subscription failed');
console.log(err); // an error occurred
reject(err);
} else {
console.log('Subscription succeeded');
console.log(data);
resolve(data);
}
});
}
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment