如何在Android、iOS或Flutter中安全使用Google Maps API密钥...
当您开发 Android、iOS 或 Flutter 应用时,确保 Google Maps API 密钥的安全性至关重要。API 密钥不应直接暴露在版本控制系统中,但您仍需在本地开发环境和持续集成(CI)环境中安全地引用它们。本文将重点介绍如何在代码中安全地引用这些密钥。
如何在 Android 中安全使用 Google Maps API 密钥
根据 Google 官方文档,为了安全存储 API 密钥,建议使用 local.properties 文件。如果项目中尚未包含该文件,可以在 Android 项目的根目录下创建它,并确保将其添加到 .gitignore 文件中以避免被版本控制工具跟踪。
在 local.properties 文件中添加如下内容(请勿使用单引号或双引号包裹密钥值):
googleMapsApiKey=YOUR_GOOGLE_MAPS_API_KEY_STRING_VALUE
接下来,在 app 目录下的 build.gradle 文件中定义变量,以便在本地和 CI 环境中使用:
def localProperties = new Properties()
localProperties.load(new FileInputStream(rootProject.file("local.properties")))
def googleMapsApiKey = localProperties.getProperty('googleMapsApiKey')
if (googleMapsApiKey == null) {
googleMapsApiKey = System.getenv("GOOGLE_MAPS_API_KEY_ENVIRONMENT_VARIABLE")
}
然后,将密钥添加到 defaultConfig 的 manifestPlaceholders 中:
manifestPlaceholders = [googleMapsApiKey: googleMapsApiKey]
最后,在 AndroidManifest.xml 文件中引用该密钥:
通过上述步骤,您可以安全地在 Android 项目中使用 Google Maps API 密钥。
如何在 iOS 中安全使用 Google Maps API 密钥
在 iOS 项目中,推荐使用 Xcode 的构建配置文件来管理 API 密钥。您需要在项目目录中创建两个配置文件:Release.xcconfig 和 Debug.xcconfig。
创建配置文件
- 在 Xcode 中选择
File > New > File...。 - 在“其他”部分选择“配置设置文件”。
- 将文件保存到项目目录中。
对于 Flutter 项目,可以将这些文件添加到 ios/Flutter 目录中。
配置密钥
在 Debug.xcconfig 文件中设置实际的 API 密钥(请勿使用单引号或双引号包裹密钥值):
GOOGLE_MAPS_API_KEY=YOUR_GOOGLE_MAPS_API_KEY_STRING_VALUE
在 Release.xcconfig 文件中引用环境变量:
GOOGLE_MAPS_API_KEY=$(GOOGLE_MAPS_API_KEY_ENVIRONMENT_VARIABLE)
在项目中引用密钥
在 Info.plist 文件中引用配置文件中的变量:
com.google.android.geo.API_KEY
$(GOOGLE_MAPS_API_KEY)
最后,在 AppDelegate.swift 文件中使用以下代码引用密钥:
GMSServices.provideAPIKey(Bundle.main.object(forInfoDictionaryKey: "googleMapsApiKey") as? String ?? "")
通过以上步骤,您可以在 iOS 项目中安全地使用 Google Maps API 密钥。
总结
需要注意的是,无论采取何种措施,API 密钥最终都会出现在应用程序的二进制文件中。虽然无法完全防止恶意用户获取密钥,但通过本文介绍的方法,您可以显著提高密钥的安全性。
此外,Android 和 iOS 应用通常使用相同的 API 密钥,因此确保两端的安全性同样重要。您还可以探索其他替代方案,例如使用 Cocoapods 密钥管理工具,或者在极端情况下将密钥直接保留在源代码中。
附加知识库
更新: 从 Flutter 2.5.3 开始,新增了一个名为 --dart-define 的功能,允许在构建项目时直接为 Android 和 iOS 设置密钥和其他敏感信息。您可以参考相关文档了解更多细节。
原文链接: http://tech.appunite.com/blog/how-to-securely-use-google-maps-api-key-in-android-i-os-or-flutter-project