使用NodeJS中的aws-sdk包将Amazon SNS推送通知实现到android设备。我下面提到的实现很少。移动设备正在显示推送通知。我想在有效载荷中发送数据和通知对象。

let payload2 = JSON.stringify({
  default: 'Naresh',
  GCM:  JSON.stringify({
    notification : {
      body : 'great match!',
      title : 'Portugal vs. Denmark'
    },
    data:{
      testdata: 'Check out these awesome deals!',
      url: 'www.amazon.com'
    }
  })
});


它没有发送推送通知。

let payload1 = {
  "GCM": "{
    \"notification\": {
      \"title\": \"this one last test in app\",
      \"body\": \"mm hello tests\"
    },
    \"data\": {
      \"turnclass\": \"efwfwe\",
      \"flight\": \"truejet\"}
  }"
};


它正在发送推送通知。

sns.publish({ TargetArn: targetArn,
  Message: payload1,
  MessageStructure: 'json'
}, (error, data) => (error) ? reject(error) : resolve(data));


发送推送通知的正确格式是什么?

最佳答案

根据文档:


  使用Amazon在消息中发送特定于平台的有效负载时
  SNS控制台,数据必须是键值对字符串,格式为
  带有引号的JSON已转义。


例:

{
   "GCM":"{
      "data":{
         "message":"Check out these awesome deals!",
         "url":"www.amazon.com"
      }
   }"
}


您在第一个有效负载中执行的操作将产生以下输出:

{"default":"Naresh","GCM":"{\"notification\":{\"body\":\"great match!\",\"title\":\"Portugal vs. Denmark\"},\"data\":{\"testdata\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}"}


那不是有效的格式。发生这种情况是因为您将对象的一部分加倍JSON.stringify。因此,如果您这样做:

let payload2 = JSON.stringify({
  default: 'Naresh',
  GCM: {
    notification: {
      body: 'great match!',
      title: 'Portugal vs. Denmark'
    },
    data: {
      testdata: 'Check out these awesome deals!',
      url: 'www.amazon.com'
    }
  }
});


它将产生:

{"default":"Naresh","GCM":{"notification":{"body":"great match!","title":"Portugal vs. Denmark"},"data":{"testdata":"Check out these awesome deals!","url":"www.amazon.com"}}}


哪个应该按预期工作。

关于javascript - AMAZON SNS使用Node js将通知有效内容推送到android mobile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47588747/

10-16 11:51