[英]Hide Google Maps API key from source control in a Flutter app
要启用 Google Maps SDK,您必须使用 API 密钥更新: android/app/src/main/AndroidManifest.xml(用于 android)和ios/Runner/AppDelegate.m(用于 ios)。
我不想将我的 API 密钥签入源代码管理。
有没有办法用.env
文件和.gitignore
隐藏这个键?
这里的最佳实践是什么?
您可以将 api 密钥设置为只能在本地机器上构建期间读取的环境变量。 创建一个环境变量 MAPS_API_KEY="your-key-here",然后将这些行添加到 [your-project]/android/app/build.gradle
defaultConfig {
manifestPlaceholders = [mapsApiKey: "$System.env.MAPS_API_KEY"]
}
然后您可以使用 mapsApiKeys 在 AndroidManifest.xml 中传递您的 api 密钥
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="${mapsApiKey}"/>
对于 ios,将这些添加到 AppDelegate.m
NSString* mapsApiKey = [[NSProcessInfo processInfo] environment[@"MAPS_API_KEY"];
[GMSServices provideAPIKey:mapsApiKey];
您可以将密钥保存在单独的文件中,然后将该文件添加到.gitignore
。 然后,如果您将文件推送到存储库,该文件将被忽略。
如果您有新同事需要开始处理同一个项目,您将需要与他们共享此文件。 从存储库签出项目后,他们需要将该文件放在与原来相同的目录中。
很长一段时间以来,我一直在我的 iOS 版 Flutter 应用程序中使用硬编码的 Google Maps API 密钥,但今天我决定一劳永逸地解决它,但即使阅读了许多文章和博文,我也没有找到解决方案这很简单。
然后我想我可以从AppDelegate.swift
GoogleService-Info.plist
文件中读取 API_KEY ,如下所示:
if let path = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist") {
let nsDictionary = NSDictionary(contentsOfFile: path)
if let apiKey = nsDictionary?["API_KEY"] as? String {
print("AppDelegate: API_KEY found")
GMSServices.provideAPIKey(apiKey)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.