在google play商店控制台中上传构建时出错。错误如下。
GCP API密钥泄漏您的应用程序包含公开的谷歌云平台(GCP(API密钥。
罪魁祸首代码如下。
Places.initialize(getApplicationContext(), BuildConfig.GOOGLE_API_KEY);
根据文档,我正在从BuildConfig中读取密钥,并限制密钥。但仍然是同样的问题。我该如何解决这个问题。。
我也面临同样的问题。我找不到任何合适的解决方案。经过大量搜索,我找到了解决方案。因此,我将为这个问题提供一个完整的指南。非常感谢Prasenjit Banerjee对我的帮助。
完整的API密钥使用指南,避免Google Play控制台中泄露的GCP API密钥安全问题:
-
首先,您需要遵循API安全最佳实践来添加限制并安全地使用API密钥。
-
然后按照设置Android Studio项目将API密钥添加到CCD_ 1并在CCD_;主程序。
-
最后访问API密钥作为
AndroidManifest.xml
文件中的变量:
<application>
.
.
.
.
<activity>
.
.
.
.
</activity>
<meta-data
android:name = "keyValue"
android:value = "${KEY}"/>
</application>
- 访问
MainActivity.kt
中的API密钥,并键入以下代码以从AndroidManifest.xml
中的元数据中获取密钥值(在GeeksforGeeks中查找本文中的解决方案(:
注意:不要使用BuildConfig
类获取这些API键,因为此类将这些属性公开为变量
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//get the KEY value from the meta-data in AndroidManifest
val ai: ApplicationInfo = applicationContext.packageManager
.getApplicationInfo(applicationContext.packageName, PackageManager.GET_META_DATA)
val value = ai.metaData["keyValue"]
val key = value.toString()
//for testing only
Toast.makeText(applicationContext, key, Toast.LENGTH_LONG).show()
// use this key to initialize places sdk
Places.initialize(applicationContext, key)
}
}
为了在GCP中保护您的API密钥,您必须搜索;凭证";在云平台控制台中。使用"创建凭据"按钮创建一个新的API密钥,其配置与受损的API密钥相同。API密钥上的限制必须匹配,否则可能会出现中断。
将API密钥推送到使用旧密钥的所有位置,然后删除旧密钥。
我建议您查看GCP中提交受损凭证的官方文件,以获得更好的细节。
除此之外,您可能需要考虑通过利用工作负载识别联盟进行免钥匙API身份验证
您不应该直接从BuildConfig从本地属性获取GCP密钥。我通过使用这个扩展函数从应用程序元数据中获取密钥来修复它
fun Context.getKey(): String {
val applicationInfo = packageManager
.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
val keyValue = applicationInfo.metaData?.get("com.google.android.geo.API_KEY")
return keyValue.toString()
}
因此,当你想获得密钥时,你可以使用
- 片段
Places.initialize(getApplicationContext(), requireContext().getKey());
- 活动
Places.initialize(getApplicationContext(), this.getKey());