2017-07-22 155 views
0

我想將AWS SNS從ASW lambda node.js發送到Android設備端點,但我一直有這個錯誤: 「com.amazonaws.mobileconnectors.lamdainvoker。 LambdaFunctionException:未處理的」從AWS Lambda Node.js向Android手機發送AWS SNS通知

的代碼基本上是類似的例子我在這裏看到的計算器:

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); 

    } 
}); 
}); 

lambda函數策略設置爲; 「效果」:在android applicationARN上的「允許」「sns:*」。 所以我猜這不是角色政策問題。 任何幫助表示讚賞。 謝謝。

回答

0

將通知發送到Android終端:

var sns = new AWS.SNS(); 

AWS.config.update({ 
accessKeyId: theaccessKeyId, 
secretAccessKey: thesecretAccessKey, 
region: theregion 
}); 


sns.createPlatformEndpoint({ 
PlatformApplicationArn: theapplicationARN, 
Token: theToken 
}, function(err, data) { 
if (err) { 
callback(null, JSON.stringify(err)); 
console.log(err.stack); 
return; 
} 

var endpointArn = "endpoinARN of receiver"; 

var payload = { 
"default": "The message string.",  
"APNS": "{\"aps\":{\"alert\": \"Check out these awesome 
deals!\",\"url\":\"www.amazon.com\"} }", 
"GCM":"{\"data\":{\"message\":\"Check out these awesome 
deals!\",\"url\":\"www.amazon.com\"}}", 
"ADM": "{ \"data\": { \"message\": \"Check out these awesome 
deals!\",\"url\":\"www.amazon.com\" }}" 
}; 

    // first have to stringify the inner GCM object... 
    payload.GCM = JSON.stringify(payload.GCM); 
    // 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) { 
    callback(null, JSON.stringify(err)); 
    //console.log(err.stack); 
    return; 
} 

    callback(null, "Sent message successfully"); 
    //console.log('push sent'); 
    // console.log(data); 
}); 
}); 

修改自己的情況。