GCM API密钥应该保密吗?

Dzm*_*rka 6 android google-cloud-messaging firebase-cloud-messaging

根据文件:

不要在客户端代码中的任何位置包含API密钥.

在我们当前的Android应用程序中就是这种情况 - API Key无法包含在代码中.但是,对于新版本的3.0.0 com.google.gms:google-services库,它在Missing api_key/current_key没有它的情况下开始抛出错误,如下所述:缺少使用Google Services 3.0.0的api_key /当前密钥.

此外,Google的配置生成器https://developers.google.com/mobile/add?platform=android&cntapi=gcmgoogle-services.json文件中包含API密钥.

它应该被保密吗?或者将它包含在客户端应用程序中是否安全?

Art*_*son 6

google-services.json 文件表示 Firebase 中所有可用服务的配置。有一些服务需要“Android”API 密钥。这些是您可以在 google-services.json 文件中找到的 API 密钥。您的应用可能会或可能不会使用这些 API 密钥,具体取决于您的应用使用的 Firebase API。

FCM 有一个用于发送消息的“服务器”API 密钥,此 API 密钥不是包含在 google-services.json 文件中的密钥。服务器 API 密钥不应包含在您的应用程序中。然而,谷歌服务插件会在构建时查找那些 Android API 密钥,这可能是导致您出错的原因,并不是因为您的 FCM 服务器 API 密钥丢失。

  • 谢谢亚瑟的回答。它有很大帮助。这两个不一样是有道理的。 (2认同)

Sho*_*uri 0

如果您使用 GCM,您的 Android 应用程序不需要知道 API 密钥。我只需api_key在 json 文件中包含一个空字段,GCM 就能工作。正如此处的回答Missing api_key/current key with Google Services 3.0.0 and Maps API key in build.gradle 中所述,我只需添加如下行google-services.json即可使 GCM 正常工作:

"api_key": [
  {
      "current_key": ""
  }
],
Run Code Online (Sandbox Code Playgroud)

我认为您不应该包含 API 密钥,因为我认为只有您的服务器需要 API 密钥来向 Google 进行身份验证,以请求其向预期接收者发送推送消息。如果有人拿到了,那就有风险了。所以文件可以如下所示:

{
  "project_info": {
    ...
  },
  "client": [
    {
      "client_info": {
         ...
      },
      "oauth_client": [
        {
          "client_id": "yourid.whatever.com",
          ...
        }
      ],
      "api_key": [
        {
          "current_key": ""
        }
      ],
      "services": {
       ...
      }
    }
  ],
  "configuration_version": "1"
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • @DzmitryLazerka 如果你仍然认为 Google 的任何人都知道他们在做什么,那么你成为 Android 开发人员的时间还不久。 (2认同)