2016-06-28 7 views
0

AWSベースのアプリに問題があります。私はアマゾンラムダに次の関数をテストすると、すべてが(私は自分の携帯電話にプッシュ通知を取得する)作品:アンドロイドアプリ内で呼び出されたときにプッシュ通知が受信されない - Amazon SNS

console.log("Loading kupa function"); 
var AWS = require("aws-sdk"); 

exports.handler = function(event, context) { 

    var eventText = JSON.stringify(event, null, 2); 
    console.log("Received event:", eventText); 
    var sns = new AWS.SNS(); 
    var params = { 
     Message: eventText, 
     Subject: "Test SNS From Lambda", 
     TopicArn: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
    }; 
    sns.publish(params, context.done); 

    context.succeed("kupa sukces"); 

}; 

をしかし、私は自分の携帯電話上で次のメソッドを使用したら、私は「kupa sukces」にログイン取得します私のAndroidスタジオが、私は電話で通知を取得しません。さらに、ラムダの「テスト」WELとしてもう動作しません...ここで コードです:

String lambdaRequest = "{\n\"kupa\" : \"" + true + "\"\n}"; 

     asyncTask.delegate = wysylaczKupy.this; 
     asyncTask.friendFunction("friendsRequest",lambdaRequest); 
      } 

friendFunctionはここにある:

public static void friendFunction(String funName, String requestContent) { 


     final String functionName = funName; 
     final String requestPayload = requestContent; 

     new AsyncTask<Void, Void, InvokeResult>() { 
      @Override 
      protected InvokeResult doInBackground(Void... params) { 
       try { 
        final ByteBuffer payload = 
          ENCODER.encode(CharBuffer.wrap(requestPayload)); 

        final InvokeRequest invokeRequest = 
          new InvokeRequest() 
            .withFunctionName(functionName) 
            .withInvocationType(InvocationType.RequestResponse) 
            .withPayload(payload); 

        final InvokeResult invokeResult = 
          AWSMobileClient 
            .defaultMobileClient() 
            .getCloudFunctionClient() 
            .invoke(invokeRequest); 

        return invokeResult; 
       } catch (final Exception e) { 
        Log.e("LAMBDA", "AWS Lambda invocation failed : " + e.getMessage(), e); 
        final InvokeResult result = new InvokeResult(); 
        result.setStatusCode(500); 
        result.setFunctionError(e.getMessage()); 
        return result; 
       } 
      } 
} 

が、私はこれをどのように修正することができますか?

は月、

はSNSトピックに公開するためのラムダ関数は非常に適切ではなかった、事前に 月

+0

Cognitoの資格情報にSNS通知を送信する権限がありますか?これは、コンソールからの呼び出しとサンプルアプリケーションからの呼び出しの主な違いです。 – Yangfan

答えて

0

、ありがとうございました。私はあなたの関数を変更し、テスト用のデフォルトのjson値を提供しました。あなたのTopicARNを入れて試してみてください。ラムダコンソールを使ってテストしたら、試していないAndroidコードを試してみてください。

JSONペイロードをSNSトピックに送信する場合は、のデフォルトのの値が必要です。デフォルト値は、プロトコル固有のメッセージを指定しない場合に使用されます。たとえば、Android GCMエンドポイントを持つSNSトピックに公開していて、JSONペイロードに「GCM」が含まれていないため、すべてのエンドポイントには、ご指定のデフォルトのメッセージが届きます。

あなたは"{\n\"kupa\" : \"" + true + "\"\n}"で何をしていたのか分かりませんが、私は "kupa"を推測しています: "true"は、アプリケーションのデータキー/値を扱うことを意図していますか?その場合は、適切なGCMペイロードをルックアップしてメッセージとデータの両方を送信する必要があります。

//Pass in the following json for testing: { "default":"some message", "kupa": "true"} 
     console.log("Loading kupa function"); 
     var AWS = require("aws-sdk"); 

     exports.handler = function(event, context, callback) { 
      var eventText = JSON.stringify(event, null, 2); 
      console.log("Received event:", eventText); 
      var sns = new AWS.SNS(); 
      var params = { 
       Message: eventText, 
       MessageStructure: "json", 
       Subject: "Test SNS From Lambda", 
       TopicArn: "arn:aws:sns:us-west-2:xxxxxxxxxx:test" 
      }; 
      sns.publish(params, function (err, data) { 
       if(err){ 
        callback(err, null); //failed 
       } 
       callback(null, "kupa sukces"); //success 
      }); 
     }; 
+0

ノード4.3を指定して、ラムダ関数がコールバックを利用できるようにします。 –

関連する問題