我正在为我的android项目使用AWS
资源,我打算使用AWS SNS
为我的项目添加推送通知服务。很少有问题困扰我。我没有发现任何关于这些的问题,除了一两个,但解释不清楚。
1. AWS
支持FCM
? SNS
与GCM
合作。但Google建议使用FCM而不是GCM
。我没有找到AWS
支持FCM
。
2.即使在发送推送通知后,还要AWS
将消息(或数据)存储到他们的数据库中吗?
3.我尝试将FCM api密钥放在SNS应用平台上,显示无效参数为什么?
答案 0 :(得分:168)
FCM向后兼容GCM。在AWS上设置FCM的步骤与GCM set up procedure相同,并且(至少暂时)FCM与GCM和SNS在服务器端配置方面透明地工作。
但是,如果您要向Android设备发送data
个有效负载,除非您实施扩展FirebaseMessagingService
的{{3}},否则不会对其进行处理。 AWS控制台中的默认JSON消息生成器发送data
消息,除非实现上述服务,否则应用程序将忽略这些消息。要解决此问题以进行初始测试,您可以提供自定义notification
有效负载,您的设备将会收到该有效负载(只要您的应用不在前台)
Google提供了client side service,但您需要进行的更改主要是在应用端。
使用SNS在您的应用上测试GCM / FCM时需要遵循的步骤是:
FirebaseInstanceIDService
并覆盖onTokenRefresh
方法才能在Android应用中查看此内容。在您Server API key之后,卸载并重新安装您的应用,并且您的令牌应在首次启动时打印到Android Studio中的调试控制台。SNS生成的消息将采用以下形式:
{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
正如我们前面提到的,如果没有实现接收它们的服务,data
个有效负载将被忽略。我们想在不编写太多代码的情况下进行测试,因此我们应该发送notification
有效负载。为此,只需将JSON消息更改为:
{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}
完成此操作后,请确保您的应用未在设备上运行,然后点击发布消息按钮。您现在应该会在设备上看到一条通知。
您当然可以通过Amazon SNS API以编程方式执行所有操作,但是所有示例似乎都使用data
有效负载,因此您需要牢记这一点并生成适合您的用例的有效负载。 / p>
答案 1 :(得分:13)
现在您可以转到firebase控制台(https://console.firebase.google.com/)选择项目,单击齿轮图标并选择项目设置,然后单击云消息传递选项卡...
您将看到作为GCM API密钥的旧服务器密钥,您可以选择生成新的服务器密钥,这是FCM版本
SNS将接受这两个版本,但其菜单选项仍在GCM
下进行分类以下图片供您参考:
请注意,您可能会意外地"删除您的服务器密钥,但旧的服务器密钥不可删除。此外,如果单击添加服务器密钥按钮,您将获得第一个下面的新服务器密钥,没有警告! ...好工作谷歌;)
答案 2 :(得分:5)
我尝试使用带有通知有效负载而非数据的解决方案,但我没有在移动设备上收到推送通知。我发现本教程https://youtu.be/iBTFLu30dSg有英文字幕,介绍如何逐步使用FCM和AWS SNS,以及如何从AWS控制台发送推送通知并使用aws php sdk在php上实现它的示例。它对我帮助很大。
答案 3 :(得分:4)
Nathan Dunn给出了一个很好的答案。 如何将来自SNS的通知发送到Firebase。
我们需要将数据添加到Json(通知内):
{
"default": “any value",
"GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}
在FirebaseMessagingService实现中(Xamarin示例)
public override void OnMessageReceived(RemoteMessage message)
{
try
{
var body = message?.GetNotification()?.Body;
var title = message?.GetNotification()?.Title;
var tag = message?.GetNotification()?.Tag;
var sound = message?.GetNotification()?.Sound;
var data = message?.Data
foreach (string key in data.Keys)
{
// get your data values here
}
}
catch (Exception e)
{
}
}
答案 4 :(得分:2)
对Nathan Dunn的答案另外说明:添加声音使用以下JSON消息
SigningCertURL
答案 5 :(得分:0)
花了我一段时间才弄清楚如何使用正确的有效负载发送通知(发布到主题)。所以我把它放在这里。
private void PublishToTopic(string topicArn)
{
AmazonSimpleNotificationServiceClient snsClient =
new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1);
PublishRequest publishRequest = new PublishRequest();
publishRequest.TopicArn = topicArn;
publishRequest.MessageStructure = "json";
string payload = "\\\"data\\\":{\\\"text\\\":\\\"Test \\\"}";
publishRequest.Message = "{\"default\": \"default\",\"GCM\":\"{" + payload + "}\"}";
PublishResponse publishResult = snsClient.Publish(publishRequest);
}
答案 6 :(得分:0)
答案 7 :(得分:0)
Amazon确实支持FCM,因为所有以前的代码已从GCM迁移到FCM。下面的文章详细说明了。