¿Cómo podría limitar el almacenamiento que le doy a cada usuario en una aplicación iOS (rápida) / Firebase?

La respuesta simple es medir el tamaño del archivo que el usuario desea cargar y luego realizar un seguimiento del tamaño total del archivo usando una variable en la base de datos de Firebase.

/ usuarios / [usuario 1] / uso actual: 500

Debería hacer un observador una vez en este valor para recuperarlo, luego agregar el tamaño del nuevo archivo a ese valor y luego establecer el valor nuevamente.

El problema aquí es que no es muy seguro. El cliente podría escribir una función JavaScript simple para establecer este valor en lo que quiera.

Hay dos formas de solucionar este problema.

Forma relativamente segura

Cada vez que se inicia la aplicación, puede recuperar el valor de current-usage de Firebase y almacenarlo en el llavero. Por supuesto, haría una comprobación para asegurarse de que el valor que provenía de Firebase era >= al valor que había guardado.

Luego, cuando quisiera establecer el valor de current-usage , usaría el valor local más el tamaño del nuevo archivo. Dado que el llavero no se borra cuando se elimina la aplicación y es un área de almacenamiento de datos muy segura, sería muy difícil para el usuario hacer trampa.

Imagine que falsificaron el valor de Firebase. La próxima vez que intenten cargar un archivo, la aplicación solo usará el valor local más el nuevo tamaño del archivo. Entonces Firebase aún sería correcto.

La forma completamente segura

La forma completamente segura sería utilizar un servicio alternativo para el almacenamiento de archivos. Algo como AWS. Su aplicación llamaría a una API en su servidor que cargaría el archivo y luego escribiría el valor en Firebase. Esto también puede ser más barato que usar el almacenamiento de Firebase.

Conclusión

De las dos opciones, elegiría la primera. Creo que es muy poco probable que alguien intente aplicar ingeniería inversa a su aplicación para obtener más almacenamiento. Si su aplicación realmente despega y esto se convierte en un problema, podría invertir un poco más de esfuerzo para implementar una solución más sólida.

Esta no es una tarea sencilla. Probablemente desee registrar todas sus cargas en la base de datos en tiempo real de su proyecto, y consultar eso antes de realizar cualquier cambio que pueda exceder las reglas que haya determinado. También necesitará un servidor de fondo que pueda responder a su procesamiento de pagos actualizando otra parte de la base de datos que determine cuál es su cuota (y asegúrese de que el usuario no tenga permiso para modificar esa ubicación también).

Cada usuario debe tener su propia carpeta para el almacenamiento. En este almacenamiento puedes organizar los archivos como quieras. Pero también debe poder hacer una prueba de tamaño simple en esa carpeta para determinar el tamaño de almacenamiento real. Esa prueba se puede hacer justo antes de aceptar una carga, en el inicio de sesión del usuario o después de una carga para determinar el espacio restante. Esto podría mostrarse en el perfil del usuario. Es posible que desee asegurarse de que las imágenes cambien de tamaño de acuerdo con la aplicación / galería (incluida la necesidad de múltiples tamaños de la misma imagen) para garantizar un valor de almacenamiento preciso.