Как опубликовать sns для конкретной конечной точки?

Я считаю, что JiBX - лучший из них (JAXB, Castor, XMLBeans и т. д.), особенно потому, что я предпочитаю файлы сопоставления над аннотациями. По общему признанию, он имеет приличную кривую обучения, но на веб-сайте есть много хороших примеров. Вы, должно быть, пропустили учебник .

Если вы идете только в одном направлении (XML -> POJO), вы можете использовать Digester .

Боковой комментарий: я предпочитаю сопоставлять файлы по аннотациям, потому что аннотации:

  • загромождают код (особенно при использовании аннотаций от нескольких продуктов)
  • проблемы смешивания (XML, база данных и т. д. в доменном слое)
  • может привязываться только к одному представлению XML (или базе данных, или веб-службе и т. д.)

17
задан Hongarc 6 November 2018 в 15:11
поделиться

3 ответа

Вы пытаетесь использовать другие конечные точки, которые отправляют уведомления, такие как смс? Прямая адресация в настоящее время доступна только для конечных точек push-уведомлений. Это ошибка, которую вы получите, когда попытаетесь опубликовать на определенной конечной точке, которая не разрешает прямую прямую адресацию!

http://aws.amazon.com/sns/faqs/#Does_SNS_support_direct_addressing_for_SMS_or_Email

1
ответ дан Neo 6 November 2018 в 15:11
поделиться

Ничего из этого не сработает, если вы не помассируете полезную нагрузку.

        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 ничего не даст.

В моем сценарии выполнялись предыдущие посты:

var params = {
    TargetArn: arn,
    Message:'Success!!! ',
    Subject: 'TestSNS'
};

И хотя CloudWatch регистрировал успех, я ни разу не получил сообщение. Как только я добавил данные MessageStructure и правильно отформатировал полезную нагрузку, он заработал как шарм.

Параметр [default] бесполезен, но я оставил его там, чтобы показать, как может выглядеть структура.

Если вы не зафиксируете часть payload.GCM, SNS откажется и скажет, что ваше сообщение должно содержать элемент «GCM».

Единственное, что раздражает, это то, что вы должны знать, какова конечная точка. Я надеялся, что вам не нужно было форматировать сообщение на основе конечной точки, что в некоторой степени противоречит цели SNS.

7
ответ дан E.T 6 November 2018 в 15:11
поделиться

Нечто подобное работает нормально для меня. Я могу публиковать на определенную конечную точку, используя: изолированную программную среду Apple Push Notification Service (APNS_SANDBOX)

Вы также можете попробовать обновить aws-sdk, текущая версия 1.9.0.

Вот мой код, TargetArn был скопирован непосредственно из консоли SNS. Я опустил некоторые данные, например & amp;

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);
        }
    });
14
ответ дан guya 6 November 2018 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: