Как публиковать sns для конкретной конечной точки?
У меня проблема с публикацией sns для конкретной конечной точки.
Мой код:
var AWS = require('aws-sdk');
AWS.config.loadFromPath('/web/config.json');
var sns = new AWS.SNS();
sns.publish({
// TopicArn:'arn:aws:sns:us-west-2:302467918846:MyTestTopik',
TargetArn:'arn:aws:sns:us-west-2:302467918846:MyTestTopik:613ee49c-d4dc-4354-a7e6-c1d9d8277c56',
Message:"Success!!! ",
Subject: "TestSNS"},
function(err,data){
if (err){
console.log("Error sending a message "+err);
}else{
console.log("Sent message: "+data.MessageId);
}
});
Когда я использую TopicArn, все в порядке. Но когда я пытаюсь отправить уведомление на конкретную конечную точку, я принимаю ошибку: Ошибка отправки сообщения InvalidParameter: Неверный параметр: Название темы
И я понятия не имею, какие параметры есть и откуда.
Ответы
Ответ 1
Нечто похоже работает для меня.
Я могу опубликовать его в конкретной конечной точке, используя: Ящик для уведомлений Apple Push Notification (APNS_SANDBOX)
Вы также можете попробовать и обновить aws-sdk, текущая версия - 1.9.0.
Здесь мой код TargetArn был скопирован непосредственно из консоли SNS. Я пропустил некоторые данные, например, и
var sns = new AWS.SNS();
var params = {
TargetArn:'arn:aws:sns:us-west-2:302467918846:endpoint/APNS_SANDBOX/<APP_NAME>/<USER_TOKEN>'
Message:'Success!!! ',
Subject: 'TestSNS'
};
sns.publish(params, function(err,data){
if (err) {
console.log('Error sending a message', err);
} else {
console.log('Sent message:', data.MessageId);
}
});
Ответ 2
Возможно, у вас есть недопустимый регион. Проверьте регион для темы и установите его соответствующим образом. Например, если вы нас-запад-2, вы можете сделать что-то вроде
var sns = new aws.SNS({region:'us-west-2'});
Ответ 3
Ничто из этого не будет работать, если вы немного не массируете полезную нагрузку.
var arn = 'ENDPOINT_ARN';
console.log("endpoint arn: " + arn);
var payload = {
default: message_object.message,
GCM: {
data: {
message: message_object.message
}
}
};
// The key to the whole thing is this
//
payload.GCM = JSON.stringify(payload.GCM);
payload = JSON.stringify(payload);
// Create the params structure
//
var params= {
TargetArn: arn,
Message: payload,
MessageStructure: 'json' // Super important too
};
sns.publish(params , function(error, data) {
if (error) {
console.log("ERROR: " + error.stack);
}
else {
console.log("data: " + JSON.stringify(data));
}
context.done(null, data);
});
Итак, оказывается, что вы должны указывать структуру сообщений (будучи json). Я попытался опубликовать до конца с консоли AWS, и он отлично работал, пока я выбрал JSON. Использование RAW ничего не сделает.
В моей работе script делались предыдущие сообщения:
var params = {
TargetArn: arn,
Message:'Success!!! ',
Subject: 'TestSNS'
};
И даже несмотря на то, что CloudWatch добился успеха в работе, я никогда не получал сообщение.
Как только я добавил данные MessageStructure и что я правильно отформатировал полезную нагрузку, он работал как шарм.
Параметр [default] не полезен, но я оставил его там, чтобы показать, как выглядит структура.
Если вы не стягиваете часть payload.GCM, SNS будет barf и скажет, что ваше сообщение должно включать элемент "GCM".
Единственное, что раздражает, - это то, что вам нужно знать, что такое конечная точка. Я надеялся, что вам не нужно форматировать сообщение на основе конечной точки, что в какой-то мере портит цель SNS.
Ответ 4
Вы пытаетесь использовать другие конечные точки, которые вызывают уведомления, такие как sms? Прямая адресация доступна только для конечных точек push-уведомлений. Это ошибка, которую вы получите при попытке опубликовать в определенной конечной точке, которая не позволяет прямое прямое обращение!
http://aws.amazon.com/sns/faqs/#Does_SNS_support_direct_addressing_for_SMS_or_Email
Ответ 5
У меня была такая же проблема, как и у вас. Проблема заключается в том, что TargetArn вы используете, там нет четкой документации. Ошибка возникает, если вы попытаетесь поместить приложение ARN в TargetArn.
Это приведет к ошибке: Недействительный параметр: TargetArn Причина: > arn: aws: sns: us-west-2: 561315416312351: app/APNS_SANDBOX/com.APP_NAME_HERE.app is > недействительный ARN для публикации.
Все, что вам нужно сделать, это положить EndpointArn в TargetArn.
Если вам нужно увидеть EndpointArn, вы можете:
- Список вызововPlatformApplications(), чтобы получить все ваши приложения ARN.
- Список вызововEndpointsByPlatformApplication() с ARN приложения, чтобы получить список EndpointArn.
Наслаждайтесь!