Android 带AWS SNS的FCM
我正在为我的android项目使用Android 带AWS SNS的FCM,android,amazon-web-services,google-cloud-messaging,amazon-sns,firebase-cloud-messaging,Android,Amazon Web Services,Google Cloud Messaging,Amazon Sns,Firebase Cloud Messaging,我正在为我的android项目使用AWS资源,我计划在AWS SNS中为我的项目添加推送通知服务。很少有问题困扰我。我没有发现任何关于这些的问题,除了一两个问题,但解释不清楚 1.AWS是否支持FCMSNS使用GCM。但谷歌建议使用FCM而不是GCM。我没有找到支持FCM的AWS 2.AWS是否在发送推送通知后将消息(或数据)存储到其数据库中 3.我尝试将FCM api密钥放入SNS应用平台,它显示了无效参数为什么?FCM向后兼容GCM。在AWS上设置FCM的步骤与相同,并且(至少目前)FCM在
AWS
资源,我计划在AWS SNS
中为我的项目添加推送通知服务。很少有问题困扰我。我没有发现任何关于这些的问题,除了一两个问题,但解释不清楚
1.AWS
是否支持FCM
<代码>SNS使用GCM
。但谷歌建议使用FCM而不是GCM。我没有找到支持FCM的AWS
2.AWS
是否在发送推送通知后将消息(或数据)存储到其数据库中
3.我尝试将FCM api密钥放入SNS应用平台,它显示了无效参数为什么?FCM向后兼容GCM。在AWS上设置FCM的步骤与相同,并且(至少目前)FCM在服务器端配置方面与GCM和SNS透明地工作 但是,如果您正在向Android设备发送
数据
有效载荷,则不会对其进行处理,除非您实现了扩展FirebaseMessagingService
。AWS控制台中的默认JSON消息生成器发送数据
消息,除非实现上述服务,否则应用程序将忽略这些消息。要在初始测试中绕过此问题,您可以提供一个自定义的通知
负载,该负载将由您的设备接收(只要您的应用程序不在前台)
有谷歌提供的,但你需要作出的改变主要是在应用程序方面
使用SNS在应用程序上测试GCM/FCM需要遵循以下步骤:
FirebaseInstancedService
并覆盖onTokenRefresh
方法才能在Android应用程序中看到这一点。一旦你卸载并重新安装你的应用程序,你的令牌应该在第一次启动时打印到Android Studio中的调试控制台{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
正如我们前面提到的,数据
有效负载将被忽略,如果没有实现接收它们的服务。我们希望在不编写太多代码的情况下进行测试,因此我们应该发送通知
有效负载。为此,只需将JSON消息更改为:
{
"GCM": "{ \"notification\": { \"title\": \"test title\", \"body\": \"test body\" } }"
}
(有关FCM消息的JSON格式的更多信息,请参阅。)
完成此操作后,请确保您的应用程序未在设备上运行,然后点击发布消息按钮。您现在应该可以在设备上看到弹出的通知
当然,您可以通过Amazon SNS API以编程方式完成所有这些,但是所有示例似乎都使用了
数据
负载,因此您需要记住这一点,并生成适合您的用例的负载。FCM向后兼容GCM。在AWS上设置FCM的步骤与相同,并且(至少目前)FCM在服务器端配置方面与GCM和SNS透明地工作
但是,如果您正在向Android设备发送数据
有效载荷,则不会对其进行处理,除非您实现了扩展FirebaseMessagingService
。AWS控制台中的默认JSON消息生成器发送数据
消息,除非实现上述服务,否则应用程序将忽略这些消息。要在初始测试中绕过此问题,您可以提供一个自定义的通知
负载,该负载将由您的设备接收(只要您的应用程序不在前台)
有谷歌提供的,但你需要作出的改变主要是在应用程序方面
使用SNS在应用程序上测试GCM/FCM需要遵循以下步骤:
FirebaseInstancedService
并覆盖onTokenRefresh
方法才能在Android应用程序中看到这一点。一旦你卸载并重新安装你的应用程序,你的令牌应该在第一次启动时打印到Android Studio中的调试控制台{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
正如我们前面提到的,数据
有效负载将被忽略,如果没有实现接收它们的服务。我们希望在不编写太多代码的情况下进行测试,因此
{
"default": “any value",
"GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}
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)
{
}
}
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);
}