【发布时间】:2016-07-08 01:04:56
【问题描述】:
请勿在客户端代码中的任何位置包含 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 密钥。
它应该保密吗?或者将其包含在客户端应用中是否安全?
【问题讨论】:
-
google-services.json 文件包含 GCM 的设置。包含发件人 id 和 api_key。您需要将其添加到模块以进行配置
-
我认为标题应该是“GCM API 密钥是否应该保密”。
-
我已经有几年没有接触过 GCM 了。过去有两个密钥:客户端密钥和发送者密钥。客户端密钥必须在应用程序中,最初在清单中的
<meta-data>元素中。如果在注册过程中没有某些客户端密钥,我无法完全想象 GCM 将如何工作。因此,除非 Google 创造了一些奇迹,否则我会假设他们的文档有误,并且客户端 API 密钥应该在客户端应用程序中。 -
@CommonsWare 感谢您的评论。据我记得,情况正好相反。
SenderId曾经在客户端应用程序中,用于生成设备令牌。服务器使用API_KEY来识别GCM。检查GCM API key vs Sender ID。这就是为什么建议不要在客户端应用程序中包含 API 密钥的原因。然而,对于矛盾的陈述以及为什么他们现在需要包含它感到困惑? -
客户端密钥不需要保密,因为您在 Web 配置控制台上为任何给定密钥定义了所有允许的应用程序 ID。因此,即使有人获得了您的客户端密钥,他们也需要拥有您的应用程序 ID,除非您将签名密钥提供给他们,否则他们无法获得。因此,将您的签名密钥保密,一切都会好起来的。
标签: android google-cloud-messaging firebase-cloud-messaging