android - 带有 AWS SNS 的 FCM

标签 android amazon-web-services google-cloud-messaging amazon-sns firebase-cloud-messaging

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

1.AWS是否支持FCMSNSGCM 一起使用。但 Google 建议使用 FCM 而不是 GCM。我没有找到支持 FCMAWS

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

3.我尝试将FCM api key放入SNS应用平台,为什么显示无效参数?

最佳答案

FCM 向后兼容 GCM。在 AWS 上设置 FCM 的步骤与 GCM set up procedure 相同。并且(至少目前)FCM 在服务器端配置方面与 GCM 和 SNS 透明地工作。

然而,如果您将 data 负载发送到 Android 设备,除非您实现 client side service,否则它们不会被处理。扩展了 FirebaseMessagingService。 AWS 控制台中的默认 JSON 消息生成器发送 data 消息,除非实现上述服务,否则您的应用程序将忽略这些消息。为了在初始测试中解决这个问题,您可以提供一个自定义的 notification 有效负载,您的设备将接收该有效负载(只要您的应用不在前台)

GCM-FCM migration instructions由 Google 提供,但您需要进行的更改主要在应用端。

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

  1. 创建 Platform Application in SNS ,选择 Google Cloud Messaging (GCM) 作为推送通知平台,并提供您的 Server API keyAPI key 字段中。
  2. 选择平台应用程序并点击创建平台端点按钮。
  3. 提供您的应用生成的 InstanceID(设备 token )。您必须扩展 FirebaseInstanceIDService 并覆盖 onTokenRefresh 方法才能在您的 Android 应用程序中看到这一点。一旦你have done this ,卸载并重新安装您的应用,您的 token 应在首次启动时打印到 Android Studio 中的调试控制台。
  4. 点击添加端点按钮。
  5. 点击您的平台应用程序的 ARN 链接。
  6. 为您的设备选择新创建的端点,然后点击发布到端点按钮。
  7. 选择 JSON 消息格式,然后点击 JSON 消息生成器按钮。
  8. 输入测试消息并点击Generate JSON按钮
  9. 现在是“陷阱部分”。

SNS 生成的消息格式如下:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

正如我们之前提到的,如果没有实现接收它们的服务,data 有效负载将被忽略。我们想在不编写太多代码的情况下进行测试,因此我们应该发送一个 notification 有效载荷。为此,只需将 JSON 消息更改为:

{
"GCM": "{ \"notification\": { \"title\": \"test title\", \"body\": \"test body\" } }"
}

(有关 FCM 消息的 JSON 格式的更多信息,请参阅 FCM documentation。)

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

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

关于android - 带有 AWS SNS 的 FCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38300450/

相关文章:

android - 关于 AsyncTask.get()

android - 工具栏图标不显示

android - 以编程方式检索Google Ads版本

python - 向多个用户 FCM 发送通知

android - 无法解码流 : fileNotFoundException

deployment - Capistrano - 如何部署到多个云服务器

amazon-web-services - 具有行为路径重定向的多个 Cloudfront 源

amazon-web-services - 如何拒绝 AWS 账户的 s3 存储桶访问

cordova - 在AppBrowser中更改cordova的url

java - 覆盖公共(public)图书馆处理推送通知的方式