[英]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.