5

由于每documentationGCM API密钥应该保密吗?

不包括API密钥您的客户端代码的任何地方。

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

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

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

+0

google-services.json文件包含GCM的设置。包含发件人ID和api_key。你需要将它添加到模块来配置 – phongvan

+0

我认为标题应该是“GCM API密钥应该保持秘密”。 – Enzokie

+0

有趣..我错过了这个问题..当提到文档时,是的,它提到了API密钥应该保密。但是由于'google-services.json'文件包含它,并且它包含在客户端应用程序中,所以它可以算作是一个部分的客户端代码。我想我以前也读过一些地方,有可能通过安装apk来检索google-services.json文件的详细信息(对不起,找不到那个特定的帖子,但我会看一下不时在附近)。 –

回答

0

如果您使用GCM,您的Android应用程序无需知道API密钥。我只需要在json文件中包含api_key的空字段,以便GCM正常工作。正如在这里THA答案Missing api_key/current key with Google Services 3.0.0 and Maps API key in build.gradle提到的,我不得不添加一行以下为google-services.json GCM工作:

我想你不应该包括API密钥,因为我觉得只有服务器需要API密钥与Google进行身份验证,以请求它向所需的收件人发送推送消息。如果有人得到它,这将是一个风险。所以文件可以看起来像:

{ 
    "project_info": { 
    ... 
    }, 
    "client": [ 
    { 
     "client_info": { 
     ... 
     }, 
     "oauth_client": [ 
     { 
      "client_id": "yourid.whatever.com", 
      ... 
     } 
     ], 
     "api_key": [ 
     { 
      "current_key": "" 
     } 
     ], 
     "services": { 
     ... 
     } 
    } 
    ], 
    "configuration_version": "1" 
} 

希望这会有所帮助。

+1

但是,如果您尝试使用Google的https://developers.google.com/mobile/add?platform=android&cntapi=gcm创建'google-services.json',则会将API密钥放入google-services.json文件中。 Firebase:https://console.firebase.google.com/?pli=1我不相信他们不知道他们在做什么。您的解决方案_might_可以工作,但由于它没有记录在任何地方,我认为它不适合使用它 - 它可能会在任何时候停止工作。我想要一些更可信的答案(例如Google工程师)。 –

+1

@DzmitryLazerka如果你仍然认为Google的任何人都知道他们在做什么,那么你已经很长时间没有成为Android开发人员。 –

+0

坦率地说,当我为Firebase生成json文件时,没有生成api_key字段的字段。如果我们能从Google的某个人那里得到答案,那就太好了。 –

1

回答我自己的问题。

如果我创建火力地堡(https://console.firebase.google.com)一个新的测试项目,还包括API密钥

  • 谷歌,services.json的Android应用程序,
  • GoogleService-Info.plist中的iOS应用,
  • 对于Web应用程序,它甚至建议将API密钥包含到我的HTML中。

由于HTML绝对是公开的,所以我相当确信它不是秘密。

4

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

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

+1

谢谢你的回答。它有很多帮助。这两个是不一样的,这是有道理的。 –

+0

一致认为这是为什么客户端密钥安全性不被关注的完整解释。 –