PocketBase como Backend para Reporte de Bugs de nuestras Apps Flutter

Cuando una app falla, la frustración del usuario puede crecer rápidamente si no tiene una forma clara de reportar el problema. Para atender ese momento crítico, integramos en nuestras apps Flutter una herramienta sencilla y accesible que permite enviar reportes de bugs, incluyendo capturas de pantalla. Usamos Pocketbase como backend ligero y flexible para almacenar estos reportes, logrando una solución rápida de implementar y fácil de usar, tanto para los usuarios como para nuestro equipo.

APPS

Nombre de la Colección: apps. Esta colección actuará como un directorio para almacenar información única sobre cada aplicación que enviará logs.

  • name: Este campo de texto nos permitirá guardar el nombre legible de la aplicación.
  • package: Aquí almacenaremos el identificador único del paquete de la aplicación, crucial para diferenciar los logs.
  • etc: Puedes añadir campos adicionales relevantes para la identificación y gestión de tus aplicaciones.

APIKEYS

Creamos una colección adicional apikeys: podemos agregar los campos necesarios, solamente vamos a usar el id

pocketbase collection apikeys

¿Por qué usar el id como API Key?

Pocketbase genera automáticamente un id único y seguro para cada registro que se crea en una colección. Podemos aprovechar esta característica para utilizar estos id como nuestras API Keys. Esto simplifica el proceso, ya que no necesitamos generar claves complejas manualmente. Cada aplicación registrada en nuestra colección bugs_report puede tener una entrada correspondiente en la colección apikeys, y el id de esta entrada actuará como su credencial única.

BUG_REPORTS

En la siguiente etapa, crearemos la colección bug_reports, donde almacenaremos los detalles de los errores reportados por los usuarios de nuestras aplicaciones.

Como se observa en la imagen, un campo crucial es package, el cual establece una relación simple con la colección apps que creamos anteriormente. Al seleccionar el id de una aplicación específica en este campo, vincularemos el reporte de bug a la aplicación correspondiente.

Además, esta colección incluye un campo imagenes que permite adjuntar múltiples archivos en diversos formatos de imagen, generando automáticamente una miniatura de 100×100 para una visualización rápida.

Finalmente, los campos email, telefono, y nombre son requeridos por el plugin flutter_bug_report_pb, aunque se definan como opcionales para el usuario final al momento de reportar un bug. Asegúrate de incluir estos campos en tu colección bug_reports para una correcta integración con el plugin.

Validando la API Key en la Colección bug_reports

La regla de escritura @request.headers.apikey ~ @collection.apikeys.id en la colección bug_reports es como un guardia de seguridad para los reportes de bugs. Funciona así:

  • @request.headers.apikey: Esto le dice a Pocketbase que mire dentro de la cabecera (la parte de arriba) de la solicitud (el envío del reporte de bug) y busque algo que se llame apikey.
  • ~: Este símbolo significa «contiene» o «coincide con».
  • @collection.apikeys.id: Esto le dice a Pocketbase que vaya a la colección apikeys y revise todos los id (las identificaciones únicas) que hay allí.

Para poder crear un nuevo reporte de bug, el valor que venga en la cabecera de la solicitud con el nombre apikey debe ser igual al id de alguno de los registros que existen en la colección apikeys

@request.headers.apikey ~ @collection.apikeys.id

De esta manera, solo las aplicaciones que conozcan una API Key válida (un id de la colección apikeys) podrán guardar nuevos reportes de bugs.

BugReportPlugin.configure(
  host: "https://website.com", // La dirección de tu servidor de Pocketbase
  collection: "bug_reports", // El nombre de la colección donde se guardarán los reportes
  apiKey: "2cpaloye67sthot", // **IMPORTANTE:** El ID de UN registro específico de la colección `apikeys`. Este ID se enviará en la cabecera HTTP con el nombre `apikey`.
  package: "sg4luigl0ymw8l2", // **IMPORTANTE:** El ID de UN registro específico de la colección `apps`. Este ID se enviará en el cuerpo (body) de la solicitud como un campo llamado `package`.
  textDictionary: dictionary, // Un diccionario para personalizar los textos de la interfaz del reporte (opcional).
);

bug_report_pb

Resultados

Los reportes entrantes los podremos visualizar en Pocketbase, y eventualmente podrémos crear un dashboard para una mejor vista y crear reportes o analizarlos detenidamente.

pocketbase collection bug_reports incoming

PocketBase como backend para reportes de bugs en Flutter es una solución moderna, minimalista y eficaz para centralizar y gestionar errores desde tus aplicaciones móviles. Gracias a su arquitectura sin servidor y su fácil integración con plugins como bug_report_pb, puedes capturar errores, adjuntar imágenes y almacenar los datos directamente en una base de datos lista para producción. Con solo configurar algunas colecciones (apps, apikeys, bug_reports) y establecer una sencilla lógica de validación, ya estarás recolectando feedback crítico desde tus usuarios.

Ventajas de Usar PocketBase

  • Ligereza: Backend sin dependencias pesadas, ideal para proyectos pequeños o medianos.
  • Fácil configuración: No requiere configuraciones complejas de servidor o bases de datos externas.
  • Almacenamiento de archivos integrado: Soporte nativo para imágenes y otros archivos multimedia.
  • Reglas de seguridad personalizables: Filtrado por headers como apikey para control de acceso.
  • Panel de administración incluido: Visualización directa de colecciones y datos desde el navegador.

Desventajas a Considerar

  • Escalabilidad limitada: No es ideal para sistemas que requieran escalabilidad horizontal o cargas masivas.
  • Sin replicación/clustering: No ofrece redundancia nativa como otros BaaS (Backend as a Service).
  • Curva de aprendizaje para reglas personalizadas: Aunque es flexible, las expresiones de reglas pueden ser confusas al principio.

Comparación: PocketBase vs Otras Soluciones

CaracterísticaPocketBaseFirebaseSupabase
PesoMuy livianoModeradoPesado
Offline disponibleLimitado
Panel Admin incluidoLimitado
Reglas tipo JWT/APIKeySí (flexible)Sí (Auth integrada)Sí (RLS)
Requiere cuenta externaNo
Fácil para autohostingNoNo

Simplificación del Proceso

El uso de IDs autogenerados como API Keys elimina pasos manuales y errores comunes. Solo necesitas:

  1. Crear la colección apikeys.
  2. Tomar el ID generado por PocketBase.
  3. Usarlo como API Key en tu plugin Flutter.

PocketBase se encarga del resto, gracias a su sistema de reglas que filtra el acceso con:
@request.headers.apikey ~ @collection.apikeys.id

Personalización

El plugin bug_report_pb permite modificar textos y comportamiento mediante un diccionario (textDictionary). Esto permite adaptar la interfaz a cada aplicación, idioma o flujo de reporte deseado, brindando una mejor experiencia al usuario final.

Además, los campos requeridos (nombre, email, teléfono) pueden marcarse como opcionales visualmente, mientras siguen presentes en la estructura de datos para una mejor integración backend.

Conclusión

Usar PocketBase como backend para reportes de bugs en apps Flutter es una elección práctica, eficiente y fácil de implementar. Ofrece una alternativa poderosa frente a soluciones más pesadas, ideal para desarrolladores que buscan control, simplicidad y velocidad en entornos autogestionados. Si buscas una manera sencilla de centralizar errores y mejorar la experiencia de tus usuarios, esta combinación puede ser justo lo que necesitas.


Publicado

en

, ,

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *