- Вопрос или проблема
- Ответ или решение
- Шаг 1: Установка зависимости
- Шаг 2: Создание файла .env
- Шаг 3: Использование переменных окружения в коде
- Шаг 4: Непосредственная работа с файлами google-services.json и firebase.json
- Опция 1: Копирование файлов вручную
- Опция 2: Создание скрипта для сборки (если у вас есть опыт работы с командной строкой)
- Шаг 5: Обновление .gitignore
- Заключение
Вопрос или проблема
Как мне использовать переменные окружения для моего API ключа flutter/firebase, app id и т.д. в файле google-services.json и firebase.json?
Я хочу загрузить свои проекты на Flutter в GitHub, не публикуя свои API ключи. Я уже защитил свой файл firebase_options.dart, полностью удалив его и создав файл “.env” отдельно, используя зависимость flutter_dotenv и вручную вводя параметры firebase, так как мое приложение предназначено исключительно для Android. Моя проблема в том, что потом я узнал, что мне также нужно защитить файлы google-services.json и firebase.json, чтобы скрыть свой API ключ.
Я уже пытался найти способы сделать то же самое, но не нашел никаких ответов. Я не изучал ни node.js, ни javascript, ни многие другие языки, кроме dart, python, java, C++ и C#, поэтому я был бы признателен за понятные ответы, желательно в пошаговом формате. Я знаю, что это достаточно требовательно с моей стороны, но я боюсь потерять свой API ключ из-за всех ужасных историй, которые я слышал об этом.
Относитесь к файлам google-services.json
и firebase.json
так же, как и к файлу .env.
Так же, как вы не хотите загружать свой файл .env, файлы google-services.json
и firebase.json
должны быть вручную скопированы (или созданы с помощью скрипта сборки) при развертывании.
Читать далее (первый ответ): https://groups.google.com/g/firebase-talk/c/mMpMymNeoxk
Ответ или решение
Использование переменных окружения для защиты конфиденциальной информации, такой как API-ключи, в приложениях Flutter с Firebase – это разумный подход, особенно если вы хотите разместить свой проект на GitHub. Ваша задача заключается в том, чтобы убрать чувствительные данные из файлов, таких как google-services.json
и firebase.json
, и использовать их без риска для безопасности.
Вот пошаговая инструкция, как это сделать:
Шаг 1: Установка зависимости
-
Убедитесь, что вы добавили зависимость
flutter_dotenv
в вашpubspec.yaml
:dependencies: flutter_dotenv: ^5.0.2 # проверьте наличие последней версии
- Запустите команду
flutter pub get
для установки зависимости.
Шаг 2: Создание файла .env
-
В корне вашего проекта создайте файл с именем
.env
(если вы его еще не создали). - Внутри этого файла добавьте ваши конфиденциальные данные, такие как API-ключи, идентификаторы проекта и т.д. Например:
FIREBASE_API_KEY=ваш_ключ FIREBASE_APP_ID=ваш_id
Шаг 3: Использование переменных окружения в коде
-
В вашем
main.dart
файле загрузите переменные окружения из.env
:import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; Future<void> main() async { await dotenv.load(fileName: ".env"); runApp(MyApp()); }
- Теперь вы можете получить доступ к вашим переменным окружения по ключам:
String apiKey = dotenv.env['FIREBASE_API_KEY']!; String appId = dotenv.env['FIREBASE_APP_ID']!;
Шаг 4: Непосредственная работа с файлами google-services.json
и firebase.json
- Вместо того, чтобы хранить файлы
google-services.json
иfirebase.json
в вашем репозитории, рекомендуется создать их программно при сборке приложения или скопировать их вручную.
Опция 1: Копирование файлов вручную
- После получения параметров Firebase (можно скачать их из консоли Firebase), скопируйте файлы
google-services.json
иfirebase.json
в директорию проекта вручную перед сборкой и развертыванием.
Опция 2: Создание скрипта для сборки (если у вас есть опыт работы с командной строкой)
- Напишите скрипт (например, на Bash или PowerShell), который будет копировать необходимые файлы в нужные директории перед сборкой приложения.
Пример скрипта на Bash для Linux/MacOS:
cp /path/to/your/google-services.json /path/to/your/flutter_project/android/app/
cp /path/to/your/firebase.json /path/to/your/flutter_project/
- Вы можете добавить этот скрипт в ваш процесс сборки, чтобы не забыть о необходимости копирования файлов.
Шаг 5: Обновление .gitignore
- Убедитесь, что файлы
google-services.json
иfirebase.json
добавлены в ваш.gitignore
, чтобы избежать их случайной загрузки в репозиторий:/android/app/google-services.json /firebase.json
Заключение
Соблюдая вышеуказанные шаги, вы сможете защитить свои API-ключи и конфиденциальные данные в приложении Flutter. Использование переменных окружения и исключение файлов с конфиденциальной информацией из вашего репозитория GitHub значительно уменьшит риск несанкционированного доступа. Не забывайте, что безопасность данных – это важная задача, требующая постоянного внимания!