我正在开发一个将通知推送到移动设备的系统,我正在构建一个asp.net web api应用程序作为服务器,将移动设备注册到aws sns,作为平台应用程序的endpoint,并使用Firebase massaging服务的令牌,我已经使用aws sns控制台成功地将消息发布到移动设备,但我找不到任何文档可以指导我使用asp.net server实现它。我已经从aws控制台文档中注册并创建了endpoint部件,如下所示:
[HttpPost]
public void RegisterWithSNS(TokenAuth tokenAuth)
{
String endpointArn = EndpointArn;
String applicationArn = "arn:aws:sns:ap-southeast-1:my arn from platform application console";
bool updateNeeded = false;
bool createNeeded = (null == endpointArn);
if (createNeeded)
{
// No platform endpoint ARN is stored; need to call createEndpoint.
EndpointArn = CreateEndpoint(tokenAuth.token, applicationArn);
createNeeded = false;
}
Console.WriteLine("Retrieving platform endpoint data...");
// Look up the platform endpoint and make sure the data in it is current, even if
// it was just created.
try
{
GetEndpointAttributesRequest geaReq = new GetEndpointAttributesRequest();
geaReq.EndpointArn = EndpointArn;
GetEndpointAttributesResponse geaRes = client.GetEndpointAttributes(geaReq);
updateNeeded = !(geaRes.Attributes["Token"] == tokenAuth.token) || !(geaRes.Attributes["Enabled"] == "true");
}
catch (NotFoundException)
{
// We had a stored ARN, but the platform endpoint associated with it
// disappeared. Recreate it.
createNeeded = true;
}
if (createNeeded)
{
CreateEndpoint(tokenAuth.token, applicationArn);
}
Console.WriteLine("updateNeeded = " + updateNeeded);
if (updateNeeded)
{
// The platform endpoint is out of sync with the current data;
// update the token and enable it.
Console.WriteLine("Updating platform endpoint " + endpointArn);
Dictionary<String, String> attribs = new Dictionary<String, String>();
attribs["Token"] = tokenAuth.token;
attribs["Enabled"] = "true";
SetEndpointAttributesRequest saeReq = new SetEndpointAttributesRequest();
saeReq.EndpointArn = EndpointArn;
saeReq.Attributes = attribs;
client.SetEndpointAttributes(saeReq);
}
}
private String CreateEndpoint(String token, String applicationArn)
{
String endpointArn = null;
try
{
Console.WriteLine("Creating platform endpoint with token " + token);
CreatePlatformEndpointRequest cpeReq = new CreatePlatformEndpointRequest();
cpeReq.PlatformApplicationArn = applicationArn;
cpeReq.Token = token;
CreatePlatformEndpointResponse cpeRes = client.CreatePlatformEndpoint(cpeReq);
endpointArn = cpeRes.EndpointArn;
}
catch (InvalidParameterException ipe)
{
String message = ipe.Message;
Console.WriteLine("Exception message: " + message);
Regex rgx = new Regex(".*Endpoint (arn:aws:sns[^ ]+) already exists with the same [Tt]oken.*",
RegexOptions.IgnoreCase);
MatchCollection m = rgx.Matches(message);
if (m.Count > 0 && m[0].Groups.Count > 1)
{
// The platform endpoint already exists for this token, but with
// additional custom data that createEndpoint doesn't want to overwrite.
// Just use the existing platform endpoint.
endpointArn = m[0].Groups[1].Value;
}
else
{
// Rethrow the exception, the input is actually bad.
throw ipe;
}
}
EndpointArn = endpointArn;
return endpointArn;
}
在移动设备(android)上,我也在我的服务器api上实现了“从firebase获取令牌”和调用RegisterWithSNS(TokenAuth TokenAuth),但现在我不知道如何使用endpoint令牌或arn将消息发布到指定的endpoint。谁能告诉我怎么做?
根据@John Rotenstein对我的问题的评论,我只是自己实现了它,就像下面所说的:
public bool PublishMessage(AWSClientModel aWSClientModel) {
PublishRequest publishRequest = new PublishRequest();
publishRequest.Message =JsonConvert.SerializeObject(aWSClientModel.Notification);
publishRequest.TargetArn = aWSClientModel.EndpointArn;
PublishResponse publishResponse = client.Publish(publishRequest);
if (publishResponse.HttpStatusCode == System.Net.HttpStatusCode.OK) {
return true;
}
return false;
}
我有一个Amazon Lambda实例和一个Amazon SNS实例。Lambda代码监视我们数据库中的变化,我希望它打电话给Amazon SNS,向我们的用户发送推送。例如: 当我们论坛上的用户收到新消息时,Lambda代码会在每次运行(每10分钟)时识别出这一变化,并应通过SNS向用户的智能手机发送推送。 说到文档,我遇到了麻烦;亚马逊的文档只讨论了如何通过SNS触发Lambda代码,而不是反
试图从JavaScript SDK发送SNS消息。从亚马逊sns控制台发送的消息显示得很好, 下面是亚马逊 SNS 控制台 JSON 生成器输出,这对我来说工作正常。 但当SNS通过代码发送时,它会抛出消息错误;我正在使用Cordova推送通知插件,它需要包含一个消息标签。 1)如何为GCM(Android平台)格式化消息并将其发送?2)如何包含消息属性?
背景资料 AWS服务是区域性的(例如,),boto3库要求您在访问客户端或资源之前设置默认区域。但是,这里的留档显示您可以使用通配符替换区域的SNS主题ARN。留档说: 文档:Amazon简单通知服务(Amazon SNS) 语法: 示例: 密码 当我使用boto3的SNS资源/客户端发布到主题ARN(该区域具有通配符)时,我得到以下错误。当我没有该区域的通配符时(例如,我指定了),一切正常。我查
在RabbitMQ中,可以创建一个交换,然后将其绑定到多个队列,每个队列都有一个路由密钥。这使得消息传递体系结构如下所示: 客户端将消息发布到exchange中,该exchange只将路由密钥为“foo”的消息路由到队列,只将路由密钥为“bar”的消息路由到队列,所有消息都路由到队列。 我很难弄清楚如何在AWS中做到这一点。我首先想到的是在各个队列上设置权限,以接受基于主题的消息,但权限条件的唯一
我试图通过注册ID使用aws. net sdk获得Endpoint Arn。但是我找不到一个好的方法来做这件事。 我的第一次尝试是运行CreatePlatformEndpoint请求与相同的注册ID,这是注册到SNS应用程序之前,由客户端(Android)发送。通过这种方式,aws api将为您提供此注册ID的Endpoint Arn。 Amazon:CreatePlatformEndpoint操
我正在用FCM和SNS测试推送通知。(社交网络- 然后,我测试了连接到firebase的iOS版本,并添加了证书等。并且可以在firebase测试页面中触发向iOS设备推送通知,而不会出现任何问题。 问题是,我无法使用iOS版本触发AWS SNS到FCM的通知(android版本没有问题)。我希望它能像android一样工作。当触发来自SNS的通知时,是否有任何自定义参数需要添加到有效负载中才能使