Este projeto é um aplicativo mobile desenvolvido com React Native (Expo) e Firebase Firestore. OBS: Muitas coisas ditas para criar, já estão feitas no repositório. Mas resolvi manter o passo a passo, para caso queira criar do Zero. Caso seja um completo iniciante, instale Node.js e Pesquise como iniciar um projeto react native.
Funções: Ele permite o cadastro, pesquisa, atualização e exclusão de veículos estacionados, com armazenamento em nuvem.
As chaves de acesso (API keys) ficam protegidas em um arquivo .env, e um arquivo intermediário chamado firebaseConfig.js é usado para importar essas variáveis de forma segura — evitando expor diretamente informações sensíveis no código-fonte.
- Visão geral
- Criação do projeto no Firebase
- Pegar as chaves de API e configurar o
.env - Instalar dependências e configurar o Babel
- Regras do Firestore
- Comandos úteis
- Exemplo rápido de uso
- Gitignore recomendado
- Dicas de segurança
- Checklist rápido
- Frontend: React Native (Expo)
- Backend: Firebase Firestore (banco de dados em nuvem)
- Gerenciamento de ambiente:
react-native-dotenv - Intermediário seguro:
firebaseConfig.js(usa variáveis do.envpara inicializar o Firebase)
- Vá para https://console.firebase.google.com/.
- Clique em “Adicionar projeto” e siga os passos.
- Após criar, acesse o projeto.
- No painel lateral, vá em Firestore Database → clique em “Criar banco de dados”.
- Escolha o modo de teste inicialmente.
- Escolha a região (ex.: southamerica-east1).
- No painel superior do Firebase, clique na engrenagem ⚙️ → Configurações do projeto (Project settings).
- Role até “Seus aplicativos (Your apps)” e clique no ícone </> (Web).
- Registre o app (exemplo:
admparkedcars-web). - Copie o bloco gerado de configuração:
const firebaseConfig = {
apiKey: "AIzaSyA...example",
authDomain: "meu-projeto.firebaseapp.com",
projectId: "meu-projeto",
storageBucket: "meu-projeto.appspot.com",
messagingSenderId: "1234567890",
appId: "1:1234567890:web:abcdef123456"
};Na raiz do projeto, crie um arquivo chamado .env com o seguinte conteúdo (exemplo):
FIREBASE_API_KEY=AIzaSyA...example
FIREBASE_AUTH_DOMAIN=meu-projeto.firebaseapp.com
FIREBASE_PROJECT_ID=meu-projeto
FIREBASE_STORAGE_BUCKET=meu-projeto.appspot.com
FIREBASE_MESSAGING_SENDER_ID=1234567890
FIREBASE_APP_ID=1:1234567890:web:abcdef123456
🔒 Importante: adicione o .env ao .gitignore para que ele não seja enviado ao GitHub:
echo ".env" >> .gitignore
git rm --cached .envO comando
npm installjá baixa tudo conforme opackage.json, mas para referência:
npm install firebase axios
npm install --save-dev react-native-dotenvCrie ou edite o arquivo na raiz do projeto:
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
['module:react-native-dotenv', {
moduleName: '@env',
path: '.env',
safe: false,
allowUndefined: true
}]
],
};
};💡 Caso não use Expo, troque
'babel-preset-expo'por'module:metro-react-native-babel-preset'.
Esse arquivo serve como camada intermediária para inicializar o Firebase com as variáveis do .env, evitando o uso direto no código principal.
// firebaseConfig.js
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';
import {
FIREBASE_API_KEY,
FIREBASE_AUTH_DOMAIN,
FIREBASE_PROJECT_ID,
FIREBASE_STORAGE_BUCKET,
FIREBASE_MESSAGING_SENDER_ID,
FIREBASE_APP_ID,
} from '@env';
// 🔐 Configuração usando variáveis de ambiente
const firebaseConfig = {
apiKey: FIREBASE_API_KEY,
authDomain: FIREBASE_AUTH_DOMAIN,
projectId: FIREBASE_PROJECT_ID,
storageBucket: FIREBASE_STORAGE_BUCKET,
messagingSenderId: FIREBASE_MESSAGING_SENDER_ID,
appId: FIREBASE_APP_ID,
};
// 🚀 Inicializa o Firebase e o Firestore
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);Após editar babel.config.js:
# Expo
npx expo start -c
# React Native CLI
npx react-native start --reset-cacheNo console do Firebase → Firestore Database → Regras (Rules)
Cole o seguinte e clique em Publicar:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Para ambiente de produção, use algo mais seguro:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Instalar dependências:
npm installRodar o app:
npx expo start
# ou
npx react-native run-androidReiniciar cache:
npx expo start -c
# ou
npx react-native start --reset-cache7 — Exemplo rápido de uso (gravar documento. Observação: Para executar esse script, digite node NomeDoArquivo.js)
import { db } from './firebaseConfig';
import { collection, addDoc, serverTimestamp } from 'firebase/firestore';
await addDoc(collection(db, 'carros'), {
nome: 'João Silva',
telefone: '11999999999',
marca: 'Toyota',
modelo: 'Corolla',
placa: 'ABC1234',
timestamp: serverTimestamp(),
});O Firestore cria automaticamente a coleção
carrosse ela ainda não existir.
# Ambiente
.env
# Node / Expo
node_modules/
.expo/
.android/
.ios/
build/
dist/
# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
*.log
- 🔒 Nunca use
allow read, write: if trueem produção. - Use autenticação com Firebase Auth.
- Guarde imagens no Firebase Storage (não diretamente no Firestore).
- Restrinja regras com base em
request.auth.uidou campos específicos. - Nunca exponha variáveis sensíveis em repositórios públicos.
- Criar projeto no Firebase
- Registrar app (Web) e copiar config
- Criar arquivo
.enve adicionar ao.gitignore - Instalar dependências (
npm install) - Configurar
babel.config.jscomreact-native-dotenv - Criar
firebaseConfig.jsintermediário - Publicar regras no Firestore
- Rodar o app com
expo startoureact-native run-android
Desenvolvido por Arthur