Как мне использовать переменные окружения для моего API ключа flutter/firebase, app id и т.д. в файле google-services.json и firebase.json?

Вопрос или проблема

Как мне использовать переменные окружения для моего 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: Установка зависимости

  1. Убедитесь, что вы добавили зависимость flutter_dotenv в ваш pubspec.yaml:

    dependencies:
     flutter_dotenv: ^5.0.2 # проверьте наличие последней версии
  2. Запустите команду flutter pub get для установки зависимости.

Шаг 2: Создание файла .env

  1. В корне вашего проекта создайте файл с именем .env (если вы его еще не создали).

  2. Внутри этого файла добавьте ваши конфиденциальные данные, такие как API-ключи, идентификаторы проекта и т.д. Например:
    FIREBASE_API_KEY=ваш_ключ
    FIREBASE_APP_ID=ваш_id

Шаг 3: Использование переменных окружения в коде

  1. В вашем 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());
    }
  2. Теперь вы можете получить доступ к вашим переменным окружения по ключам:
    String apiKey = dotenv.env['FIREBASE_API_KEY']!;
    String appId = dotenv.env['FIREBASE_APP_ID']!;

Шаг 4: Непосредственная работа с файлами google-services.json и firebase.json

  1. Вместо того, чтобы хранить файлы 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

  1. Убедитесь, что файлы google-services.json и firebase.json добавлены в ваш .gitignore, чтобы избежать их случайной загрузки в репозиторий:
    /android/app/google-services.json
    /firebase.json

Заключение

Соблюдая вышеуказанные шаги, вы сможете защитить свои API-ключи и конфиденциальные данные в приложении Flutter. Использование переменных окружения и исключение файлов с конфиденциальной информацией из вашего репозитория GitHub значительно уменьшит риск несанкционированного доступа. Не забывайте, что безопасность данных – это важная задача, требующая постоянного внимания!

Оцените материал
Добавить комментарий

Капча загружается...