簡體   English   中英

在 Flutter 應用程序的源代碼管理中隱藏 Google Maps API 密鑰

[英]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 然后,如果您將文件推送到存儲庫,該文件將被忽略。

如果您有新同事需要開始處理同一個項目,您將需要與他們共享此文件。 從存儲庫簽出項目后,他們需要將該文件放在與原來相同的目錄中。

從 Flutter 1.17 開始,您可以為此使用編譯時變量。 只需在flutter runflutter build命令中使用--dart-define鍵即可。 然后您可以在您的 iOS 或 Android 代碼中使用它們。 這是一篇帶有一些解釋和示例的文章

很長一段時間以來,我一直在我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM