请勿在客户端代码中的任何位置包含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=gcm在google-services.json
文件中包含API密钥。
它应该被保密吗?或者将它包含在客户端应用程序中是否安全?
答案 0 :(得分:4)
google-services.json文件代表Firebase中所有可用服务的配置。有一些服务需要和“Android”API密钥。这些是您可以在google-services.json文件中找到的API密钥。您的应用可能会也可能不会使用这些API密钥,具体取决于您的应用使用的Firebase API。
FCM有一个“服务器”API密钥用于发送邮件,此API密钥不是google-services.json文件中包含的密钥。服务器API密钥永远不应包含在您的应用程序中。但是谷歌服务插件会在构建时查找这些Android API密钥,这可能是导致错误的原因,这不是因为您的FCM服务器API密钥丢失了。
答案 1 :(得分:2)
回答我自己的问题。
如果我在Firebase上创建一个新的测试项目(https://console.firebase.google.com),它还会包含API密钥
认为HTML肯定是公开的,我现在非常确信它不是秘密。
答案 2 :(得分:0)
如果您使用GCM,您的Android应用程序无需了解API密钥。我只需要在json文件中包含api_key
的空字段,以便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": ""
}
],
我认为您不应该包含API密钥,因为我认为只有您的服务器需要API密钥才能与Google进行身份验证,以请求它向目标接收者发送推送消息。如果有人掌握它,那将是一种风险。所以文件看起来像:
{
"project_info": {
...
},
"client": [
{
"client_info": {
...
},
"oauth_client": [
{
"client_id": "yourid.whatever.com",
...
}
],
"api_key": [
{
"current_key": ""
}
],
"services": {
...
}
}
],
"configuration_version": "1"
}
希望这有帮助。