19

特定のエンドポイントへの 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: Invalid parameter: Topic Name

そして、それがどのような種類のパラメーターで、どこからのものなのかわかりません。

4

5 に答える 5

15

似たようなものが私にとってはうまくいっています。Apple Push Notification Service Sandbox (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);
        }
    });
于 2013-10-19T21:03:33.317 に答える
9

無効な地域がある可能性があります。トピックのリージョンを確認し、それに応じて設定します。たとえば、あなたが us-west-2 の場合、次のようなことができます

var sns = new aws.SNS({region:'us-west-2'});
于 2014-02-19T22:26:08.030 に答える
7

ペイロードを少しマッサージしないと、これはどれも機能しません。

        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 の目的を実際に無効にします。

于 2015-06-24T23:51:03.787 に答える
1

SMS などのプッシュ通知を行う他のエンドポイントを試していますか? 直接アドレス指定は現在、プッシュ通知エンドポイントでのみ使用できます。これは、直接直接アドレス指定を許可しない特定のエンドポイントに公開しようとしたときに発生するエラーです!

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

于 2014-11-23T03:10:05.407 に答える
0

私はあなたとまったく同じ問題を抱えていました。問題は、使用している TargetArn です。それに関する明確なドキュメントはありません。アプリケーション ARN を TargetArn に配置しようとすると、エラーが発生します。

これにより、次のエラーが生成されます: Invalid parameter: TargetArn Reason: >arn:aws:sns:us-west-2:561315416312351:app/APNS_SANDBOX/com.APP_NAME_HERE.app is >not a valid ARN to publish.

必要なのは、EndpointArn を TargetArn に配置することだけです。

EndpointArn を表示する必要がある場合は、次のことができます。

  1. listPlatformApplications() を呼び出して、すべてのアプリケーション ARN を取得します。
  2. アプリ ARN で listEndpointsByPlatformApplication() を呼び出して、EndpointArn のリストを取得します。

楽しみ!

于 2015-05-28T21:48:00.217 に答える