当前位置: 首页 > 知识库问答 >
问题:

使用AWS Lambda控制台使用SNS发送推送

董昕
2023-03-14

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

我想做的是简单地使用aws lambda函数(通过aws控制台)从DynamoDB(未包含在问题中)获取用户fcm令牌,使用该令牌创建endpoint 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;
};

共有1个答案

龙俊良
2023-03-14

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

1-有效负载的GCM部分应该是字符串,而不是json 2-消息参数应该具有一个属性,该属性将有效负载的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'
    };

这将起作用:)

 类似资料:
  • 我想通过向Android手机endpoint发送推送通知。 已配置并已准备好发送通知。在使用我发送的 JSON 的 SNS 控制台中 { “GCM”: “{ ”通知“: { ”标题“: ”标题“, ”正文“: ”正文“} 但我只收到空notification.No正文,没有标题(只有应用程序图标)。

  • 我设置了亚马逊SNS和iOS应用程序,通过SNS控制台发送推送通知,并在iOS中接收。工作正常。 现在,我尝试从一台设备向另一台设备发送推送通知,但收到以下错误: -[AWSServiceInfo initWithInfoDictionary:checkRegion:|无法从读取提供程序配置的凭据。请检查您的<code>信息。plist如果您通过<code>Info.plist 这是我发送推送通知

  • 我搜索了AWS留档,浪费了几个小时,但找不到使用节点JS发送消息推送的应用编程接口和代码。有人能帮助在Android和iOS设备上使用节点JS发送AWS SNS消息推送吗?

  • Sometimes it’s nice to work with your contracts interactively for testing and debugging purposes, or for executing transactions by hand. Truffle provides you two easy ways to do this via an interactiv

  • 我想用亚马逊SNS向2000万台设备发送时间紧迫的移动推送通知。每个话题最多可以有10000个设备,我最多可以创建3000个话题。使用Amazon PHP SDK意味着每1秒发送2000个API调用--总共33分钟。这对时间紧迫的消息没有好处。 我已经创建了一个SQS队列并将其订阅到SNS主题。当我将推送消息发送到SQS队列时,它不会被传递--它仍然留在队列中。

  • 我为沙盒iOS设置了推送通知,它们曾经工作过,但由于某种原因目前不工作。这是来自云观察日志的错误AWS SNS: 这是我的发送代码(AWS Lambda调用此代码): Lambda方法的返回数据: 我已经将问题缩小到不与我的lambda方法关联,因为我试图发布到直接从SNS控制台创建的endpoint。我还想知道为什么这个旧的实现在过去,一个月或两个月前,仍然有效,而现在不再有效。我认为这可能与过