Python · Firebase · Email · Backend

Creación de una app en Python que comunica con Firebase

En este proyecto implementamos una aplicación en Python capaz de comunicarse con Firebase, descargar información almacenada en la base de datos y enviar correos electrónicos de forma automática.

El objetivo práctico será recuperar los datos de una colección y utilizarlos para enviar avisos por correo a los usuarios almacenados en Firebase.

Vídeo complementario

Si quieres ampliar el contenido del artículo, puedes consultar el siguiente vídeo:

1. Introducción

Firebase es una plataforma para el desarrollo de aplicaciones web y móviles lanzada en 2011 y adquirida por Google en 2014.

Se trata de una plataforma en la nube, integrada con Google Cloud Platform, que proporciona herramientas para crear, sincronizar y escalar proyectos sin necesidad de desarrollar toda la infraestructura desde cero.

Entre sus principales ventajas destacan las siguientes:

  • Sincronización sencilla de datos sin lógica compleja de comunicaciones.
  • Compatibilidad con aplicaciones web, Android, iOS, Unity y C++.
  • Escalado automático sobre la infraestructura de Google.
  • Posibilidad de crear proyectos sin servidor propio.
  • Amplia documentación oficial y comunidad activa.

2. Implementación

Este ejemplo se plantea desde el lado servidor. La cuenta de servicio de Firebase se carga desde Python, por lo que las credenciales privadas no llegan al navegador y el cliente no necesita permisos directos de lectura sobre la base de datos. Esa separación es importante si después los datos alimentan una app Angular, una tarea programada o un panel interno.

En este ejemplo, el objetivo será enviar un email a las direcciones almacenadas en Firebase. Para ello, se ha definido una colección de subastas con una estructura similar a la siguiente:

El primer paso consiste en instalar la librería firebase-admin:

A partir de este momento ya se podrá acceder al contenido almacenado en la base de datos. Esta información se recupera a partir de documentos JSON mediante el siguiente código:

Si analizamos el código, uno de los puntos clave es la obtención de las credenciales JSON a partir del fichero clave.json:

Para obtener este documento, puedes acceder a la consola de Google Cloud en el siguiente enlace: https://console.cloud.google.com/projectselector/apis/api/firebasedatabase.googleapis.com/overview?hl=es

Una vez configurado el acceso, ya es posible recuperar directamente la información de la base de datos:

En resumen, Firebase permite construir soluciones backend ligeras y muy rápidas de integrar, especialmente útiles cuando queremos centralizar datos y automatizar acciones como el envío de correos.

Notas de seguridad y producción

La regla principal es que el fichero JSON de la cuenta de servicio no debe exponerse nunca en Angular ni subirse a un repositorio publico. Debe vivir en backend, protegido mediante variables de entorno, un gestor de secretos o un directorio privado de despliegue. El frontend tiene que llamar a un endpoint controlado, no conectarse con permisos administrativos.

Tambien conviene separar la lectura de Firestore de la logica de notificaciones. Un servicio pequeño puede leer la coleccion, validar los campos esperados, construir un DTO normalizado y pasar solo los valores necesarios al modulo de email. Asi los errores se prueban mejor y se evita enviar mensajes a partir de documentos incompletos.

  • Usa credenciales con privilegios minimos y rota claves de servicio cuando cambie el equipo.
  • Registra fallos de entrega sin almacenar contenido privado del mensaje de forma innecesaria.
  • Valida direcciones de destinatario antes de llamar a SMTP o a un proveedor transaccional.
  • Mueve el proceso a una cola o tarea programada si deja de ser un script pequeño.

Otra mejora practica es anadir un modo dry-run. En ese modo el backend lee Firestore, prepara el mensaje y escribe en logs los destinatarios previstos, pero no envia el correo. Es util para probar una estructura nueva de coleccion o validar que una notificacion programada no contactara con usuarios equivocados.

Para SEO y mantenimiento, esta pagina separa la explicacion conceptual de Firebase de las decisiones de seguridad del backend. Asi deja de ser solo un fragmento de codigo y ayuda a entender por que el SDK administrativo debe vivir en Python y no en el navegador.

Si el siguiente paso es exponer esos datos a una aplicación Angular, conviene revisar el ejemplo de consumo de APIs con HttpClient y la guía para proteger una API Angular con Nginx y FastAPI.