[英]Anyone using Node.js with Amazon SNS and Apple Push Notifications?
我正在尋找使用帶有Amazon SNS和Apple APN推送通知的node.js的示例。 我們使用亞馬遜進行托管,之前我使用過SNS,非常簡單。 但是它們用於推送通知的示例是針對java的,並且沒有Node的示例。 這和他們一樣令人困惑,我希望減少我的研究和時間。 它不會那么難。 我也想知道他們如何處理錯誤,以及沙盒和生產之間的差異。 Apple在兩種環境之間做出不同的反應,而不是像生產中那樣在沙箱中失敗。
它最終沒那么難,只是弄清楚文檔是不愉快的。 您需要在控制台中為SNS主題創建主要端點,這是迄今為止最簡單的方法,包括加載證書。 然后,您使用createPlatformEnpoint為每個設備ID創建端點。 這將返回另一個SNS主題,特定於該設備,然后您可以使用該主題發送消息。
因此,以下工作將單個消息發送到單個客戶端。 如果你想集體發送一些東西,不確定你能做到這一點。 還不確定你如何處理Apple的反饋,你應該檢查失敗的發送。
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);
}
});
});
CargoMeister指出,這是相當簡單的。
我寫了一篇關於設置它的博客文章,請點擊此處http://evanshortiss.com/development/mobile/2014/02/22/sns-push-notifications-using-nodejs.html
我還有一個Node.js包裝器模塊,它比AWS SDK更容易使用,因為我已經使用了文檔。 它支持iOS和Android推送服務(因為我已經測試/使用過),管理除Strings之外的消息格式並公開事件: https : //npmjs.org/package/sns-mobile
我沒有使用主題來管理端點,但不確定是否存在問題。 您只需通過SNS控制台創建PlatformEndpoints。
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)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.