在 Flutter 应用程序的源代码管理中隐藏 Google Maps API 密钥

You*_*Ken 7 git android google-maps ios flutter

要启用 Google Maps SDK,您必须使用 API 密钥更新: android/app/src/main/AndroidManifest.xml(用于 android)和 ios/Runner/AppDelegate.m(用于 ios)。

问题:

我不想将我的 API 密钥签入源代码管理。

有没有办法用.env文件隐藏这个键.gitignore

这里的最佳实践是什么?

Kus*_*iya 14

您可以将 api 密钥设置为只能在本地机器上构建期间读取的环境变量。创建一个环境变量 MAPS_API_KEY="your-key-here",然后将这些行添加到 [your-project]/android/app/build.gradle

 defaultConfig {
        manifestPlaceholders = [mapsApiKey: "$System.env.MAPS_API_KEY"]
    }
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 mapsApiKeys 在 AndroidManifest.xml 中传递您的 api 密钥

 <meta-data android:name="com.google.android.geo.API_KEY"
                android:value="${mapsApiKey}"/>
Run Code Online (Sandbox Code Playgroud)

对于 ios,将这些添加到 AppDelegate.m

NSString* mapsApiKey = [[NSProcessInfo processInfo] environment[@"MAPS_API_KEY"];

[GMSServices provideAPIKey:mapsApiKey];
Run Code Online (Sandbox Code Playgroud)

  • 如何创建环境变量? (2认同)
  • 您可以通过输入“MAP_API_KEY=some-value”或“SOMEVARIABLE=some-value”从终端创建它们 (2认同)
  • 好的。这就是我所做的,但不确定。谢谢。另外,当我构建然后部署应用程序时,任何人都无法通过反编译我的应用程序来看到密钥?太棒了! (2认同)
  • 我尝试在 Windows 上使用 Powershell `$Env:MAPS_API_KEY = "&lt;api-key&gt;"` 遵循此配方,并在 Android Studio 中运行时获取 `API Key: null`。 (2认同)

小智 1

您可以将密钥保存在单独的文件中,然后将该文件添加到.gitignore. 然后,如果您将文件推送到存储库,该文件将被忽略。

如果您有一位新同事需要开始处理同一个项目,您将需要与他们共享此文件。从存储库中签出项目后,他们需要将该文件放置在与原来相同的目录中。