web-dev-qa-db-ja.com

AmazonSNSとAppleプッシュ通知)でNode.jsを使用している人はいますか?

AmazonSNSとApple APNプッシュ通知)でnode.jsを使用する例を探しています。ホスティングにはAmazonを使用しており、以前にSNSを使用したことがありますが、例は非常に簡単です。プッシュ通知はJava用であり、Nodeの例はありません。いつものように混乱しているので、調査と時間を短縮したいと思っています。それほど難しいことではありません。私はまた、エラーの処理方法や、サンドボックスと本番環境の違いについても疑問に思っています。Appleは、本番環境のようにサンドボックスで失敗することなく、2つの環境間で異なる反応を示します。

17
CargoMeister

結局、それほど難しくはなく、ドキュメントを理解するだけでは不快でした。証明書のロードなど、はるかに簡単な方法で、コンソールで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);

        }
    });
});
20
CargoMeister

CargoMeisterが指摘したように、それはかなり簡単です。

セットアップについてのブログ投稿を書きました。こちらをチェックしてください http://evanshortiss.com/development/mobile/2014/02/22/sns-Push-notifications-using-nodejs.html ==

また、ドキュメントを回避したため、AWSSDKよりも使いやすいNode.jsラッパーモジュールもあります。 iOSとAndroidプッシュサービス(私がテスト/作業したのはこれだけです)をサポートし、文字列以外のメッセージ形式を管理し、イベントを公開します: https://npmjs.org/package/sns-mobile

エンドポイントの管理にトピックを使用したことはありませんが、それが問題かどうかはわかりません。最初にSNSコンソールを介してPlatformEndpointsを作成するだけです。

8
Evan Shortiss
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)
})
5