我正在使用AWS
资源进行我的安卓项目,我计划使用AWS SNS
为我的项目添加推送通知服务,有几个问题让我很困扰,除了一两个解释不清的问题外,我没有找到任何相关的问题。
1. AWS
支持FCM
吗?SNS
可以使用GCM
,但谷歌建议使用FCM
替代GCM
。我没有发现AWS
支持FCM
。
2.在发送推送通知后,AWS
是否将消息(或数据)存储到他们的数据库中?
3.我尝试将FCM API密钥放入SNS应用程序平台,但显示无效参数,原因是什么?
我正在使用AWS
资源进行我的安卓项目,我计划使用AWS SNS
为我的项目添加推送通知服务,有几个问题让我很困扰,除了一两个解释不清的问题外,我没有找到任何相关的问题。
1. AWS
支持FCM
吗?SNS
可以使用GCM
,但谷歌建议使用FCM
替代GCM
。我没有发现AWS
支持FCM
。
2.在发送推送通知后,AWS
是否将消息(或数据)存储到他们的数据库中?
3.我尝试将FCM API密钥放入SNS应用程序平台,但显示无效参数,原因是什么?
FirebaseMessagingService
的客户端服务。 AWS控制台中的默认JSON消息生成器发送 data
消息,除非实现了上述服务,否则应用程序将忽略它们。为了在初始测试中解决此问题,可以提供自定义通知
有效负载,该有效负载将被您的设备接收(只要您的应用程序不在前台)FirebaseInstanceIDService
并覆盖onTokenRefresh
方法以在Android应用程序中查看此内容。一旦您完成了这个步骤,请卸载并重新安装您的应用程序,您的令牌应该会在首次启动时打印到Android Studio的调试控制台上。{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
{
"GCM": "{ \"notification\": { \"title\": \"test title\", \"body\": \"test body\" } }"
}
现在你可以前往你的 Firebase 控制台 (https://console.firebase.google.com/),选择你的项目,点击齿轮图标并选择“项目设置”,然后点击“云消息传递”选项卡...
您将看到遗留的服务器密钥,即 GCM API 密钥,并且您将有生成新的服务器密钥的选项,这些是 FCM 版本。
SNS 将接受两个版本,但其菜单选项仍将其归类为 GCM。
以下是供参考的图片:
请注意,您可以“意外地”删除您的服务器密钥,但遗留的服务器密钥无法删除。 此外,如果您单击添加服务器密钥按钮,则会在第一个键下方获得一个新的服务器密钥,而没有任何警告!...Google 做得很好 ;)
对于Nathan Dunn的出色回答,我还有一个额外的说明。
如何从SNS向Firebase发送带有数据的通知。
我们需要在Json中添加数据(在通知内部):
{
"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)
{
}
}
我曾尝试使用通知有效载荷(notification payload)而非数据(data)的解决方案,但是我并没有在移动设备上收到推送通知。我发现了这个带有英文字幕的教程https://youtu.be/iBTFLu30dSg,它详细介绍了如何逐步使用FCM与AWS SNS以及如何通过AWS控制台发送推送通知,并提供了在php中使用aws php sdk实现的示例。这对我的帮助很大。
关于Nathan Dunn的答案,还有一个额外的说明:如果要添加声音,请使用以下JSON消息
{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
我花了一些时间才弄清楚如何发送带有正确负载的通知(发布到主题)。所以我会把它放在这里。
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);
}