【问题标题】:Using AWS Lambda Console to send push using SNS使用 AWS Lambda 控制台使用 SNS 发送推送
【发布时间】:2021-08-18 09:02:58
【问题描述】:

我在互联网上尝试了所有可能的解决方案,没有希望

我想要做的是简单地使用 aws lambda 函数(通过 aws 控制台)从假设 DynamoDB(不包括在问题中)获取用户 fcm 令牌,使用该令牌创建端点Arn,发送推送到那个特定设备

我测试了使用 SNS 控制台发送并且推送成功到达设备,但我未能使用 Lambda 函数将其发送到设备,尽管它提供了成功状态和消息 ID

这是我使用的代码

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set region
AWS.config.update({region: 'us-east-1'});
const sns = new AWS.SNS()

const sampleMessage = {
    "GCM": { 
        "notification": { 
            "body": "Sample message for Android endpoints", 
            "title":"Title Test" 
        } 
    }
}



exports.handler = async (event) => {

    const snsPayload = JSON.stringify(sampleMessage);

    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    
    const params = {
        PlatformApplicationArn: '<Platform Arn>',
        Token: '<FCM Token>'
    };
    
     try {
        const endpointData = await sns.createPlatformEndpoint(params).promise();

        const paramsMessage = {
            Message: snsPayload,
            TargetArn: endpointData.EndpointArn
        };
        var publishTextPromise = await sns.publish(paramsMessage).promise();

        response.MessageId = publishTextPromise.MessageId;
        response.result = 'Success';
        
     }
     catch (e) {
         console.log(e.stack)
         response.result = 'Error'
     }
  

    return response;
};

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-sns


    【解决方案1】:

    经过一些试验和错误,我找到了解决自己问题的方法

    1- 有效载荷的 GCM 部分应该是字符串而不是 json 2- message 参数应该有一个属性,将负载的 mime 类型显式设置为 Json

    综合考虑

     const GCM_data = { 
        'notification': { 
            'body': 'Hellow from lambda function', 
            'title': 'Notification Title' 
        } 
    }
    
    const data = {
        "GCM": JSON.stringify(GCM_data)
    }
    const snsPayload = JSON.stringify(data)
    

    参数应该是这样的

    const paramsMessage = {
            Message: snsPayload,
            TargetArn: endpointData.EndpointArn,
            MessageStructure: 'json'
        };
    

    这将起作用:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多