使用AWS SNS的FCM

Nar*_*oju 91 android amazon-web-services amazon-sns google-cloud-messaging firebase-cloud-messaging

我正在AWS为我的android项目使用资源,我打算为我的项目添加推送通知服务AWS SNS.有几个问题困扰我.我没有发现任何关于这些的问题,除了一两个但解释不清楚.

1. AWS支持FCM吗?SNS与...合作GCM.但谷歌建议使用FCM代替GCM.我没有找到AWS支持FCM.

2. AWS即使在发送推送通知后,还是将消息(或数据)存储到他们的数据库中?

3.我试过把FCM api密钥放在SNS应用平台上,显示无效参数为什么?

Nat*_*unn 180

FCM向后兼容GCM.在AWS上设置FCM的步骤与GCM设置过程相同,并且(至少暂时)FCM与GCM和SNS在服务器端配置方面透明地工作.

但是,如果data要将有效负载发送到Android设备,除非您实现扩展的客户端服务,否则不会处理它们FirebaseMessagingService.AWS控制台中的默认JSON消息生成器data会发送消息,除非实现上述服务,否则应用程序将忽略这些消息.要解决此问题以进行初始测试,您可以提供notification设备将接收的自定义有效负载(只要您的应用不在前台)

GCM-FCM迁移说明由谷歌提供的,但是你需要做的改变主要是在应用程序方面.

使用SNS在您的应用上测试GCM/FCM时需要遵循的步骤如下:

  1. 在SNS中创建平台应用程序,选择Google云消息传递(GCM)作为推送通知平台,并在API密钥字段中提供服务器API密钥.
  2. 选择Platform Application并单击Create platform endpoint按钮.
  3. 提供应用生成的InstanceID(设备令牌).您必须扩展FirebaseInstanceIDService和覆盖onTokenRefresh方法才能在Android应用中查看此内容.一旦你这样做了,请卸载并重新安装您的应用,您的令牌应打印到Android Studio中第一次启动调试控制台.
  4. 单击" 添加端点"按钮.
  5. 单击适用于您的平台应用程序的ARN链接.
  6. 为您的设备选择新创建的端点,然后单击" 发布到端点"按钮.
  7. 选择JSON 消息格式,然后单击JSON消息生成器按钮.
  8. 输入测试消息,然后单击Generate JSON按钮
  9. 现在是"陷阱部分".

SNS生成的消息将采用以下形式:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
Run Code Online (Sandbox Code Playgroud)

如前所述,data如果没有实现接收服务,则将忽略有效负载.我们想在不编写太多代码的情况下进行测试,因此我们应该发送一个notification有效负载.要执行此操作,只需将JSON消息更改为:

{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,请确保您的应用未在设备上运行,然后点击" 发布消息"按钮.您现在应该会在设备上看到一个通知.

您当然可以通过Amazon SNS API以编程方式执行所有这些操作,但是所有示例似乎都使用了data有效负载,因此您需要牢记这一点并生成适合您的用例的有效负载.

  • 非常好的回答,谢谢.值得注意的是,json在配置选项方面有一些深度 - 请参阅https://developers.google.com/cloud-messaging/concept-options - 尽管我还没有测试任何特定于FCM的功能. (2认同)
  • SNS使用GCM,因此如果您使用的是GCM客户端,它应该正常运行(直到Google决定退出GCM).此问题更多与AWS上的FCM支持有关(通过Google API方面的向后兼容性支持) (2认同)

Rez*_*eza 13

现在您可以访问您的firebase控制台(https://console.firebase.google.com/)选择您的项目,单击齿轮图标并选择项目设置,然后单击云消息传递选项卡...

您将看到作为GCM API密钥的旧版服务器密钥,您可以选择生成新的服务器密钥,这些密钥是FCM版本

SNS将接受这两个版本,但其菜单选项仍在GCM下进行分类

这是图片供您参考:

在此输入图像描述

请注意,您可以"意外"删除服务器密钥,但旧版服务器密钥不可删除.此外,如果单击添加服务器密钥按钮,您将获得一个新的服务器密钥,而不是第一个,没有警告!...好工作谷歌;)


小智 5

我尝试使用带有通知有效负载的解决方案而不是数据,但我没有在移动设备上收到推送通知.我找到了本教程https://youtu.be/iBTFLu30dSg,其中有英文字幕,介绍了如何逐步使用FCM和AWS SNS,以及如何从AWS控制台发送推送通知并使用aws php sdk在php上实现它的示例.这对我帮助很大.


Ady*_*dys 5

内森·邓恩(Nathan Dunn)的出色回答再增加了一个注释。如何将带有通知的数据从SNS发送到Firebase。

我们需要向Json添加数据(在通知内部):

{
    "default": “any value", 
     "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}
Run Code Online (Sandbox Code Playgroud)

在您的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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)