Este documento discute el desarrollo de aplicaciones desconectadas con MAUI. Explica que MAUI permite identificar el estado de conexión del dispositivo y almacenar datos localmente usando SQLite u otros formatos. También aborda cómo manejar conflictos cuando los datos se sincronizan entre dispositivos y el backend, y que aunque es posible desarrollar aplicaciones desconectadas, aún se necesita conexión para algunas funciones como instalación, autenticación y sincronización.
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
Offline First Apps with MAUI - Building disconnected apps in a connected world
1. Offline First Apps with MAUI
Robinson Moscoso – rmoscosp /
SENIOR DEVELOPER
2. Contenido
Aplicaciones desconectadas en un mundo conectado
El usuario siempre debe saber cuando esta conectado
El cielo esta despejado ¿dónde guardo la información?
¿Quién fue primero, El huevo o la gallina?
Pero igual necesito conexión
Ahora lo que todos quieren
3. Aplicaciones desconectadas en un mundo
conectado
Media global
59.5%
Sudamérica
72.5%
Centroamérica
67%
Penetración de Internet *
* Información tomada de: https://es.statista.com/estadisticas/541451/penetracion-mundial-de-internet-por-region-del-mundo/
4. El usuario siempre debe saber cuando esta
conectado
Sin conexión
Sincronizo si hay red
Botón de sincronizar
5. MUAI Network Status
• MAUI usa IConnectivity para:
• Identificar si tiene acceso a internet
• Identificar los tipos de conexión (Bluetooth, móvil o WiFi)
• Evento para supervisar los cambios en el estado de conexión
• El espacio de nombre es: Microsoft.Maui.Networking
Internet Acceso a Internet y local.
ConstrainedInternet Acceso limitado a Internet
Local solo acceso a la red local
None no hay conectividad disponible
Unknown No se puede determinar la
conectividad a Internet
6. El cielo esta despejado ¿dónde guardo la información?
• Pequeñas piezas de datos
• Key/Value
Preferences.Set(“tableRows", 15);
var savedPreference = Preferences.Get("tableRows", 10);
• Guardar archivos sueltos en diferentes formatos (XML, birary, text files)
• Estructura de directorios – sandbox (en IOS usa Library)
string path = FileSystem.AppDataDirectory;
• Datos relacionales de la aplicación
• Archivo de base de datos SQLite => AppDataDirectory
• Class for models
using SQLite; ...
string filename = ...
SQLiteConnection conn = new SQLiteConnection(filename);
7. Backend
¿Quién fue primero, el huevo o la gallina?
• Código y data deben estar en el dispositivo
• Código en apps no es problema, va con la app (en web no)
• Data en base de datos
• Resolución de conflictos
Dispositivo 2
BD
Aplicación
Dispositivo 1
Aplicación
Api
BD
BD
8. Resolución de conflictos
• Inserción
• Si un registro es insertado en D1 y uno en D2, en el Backend habrán dos registros
nuevos (el registro se debe crear con un id y replicarlo luego en D1 y D2 para posibles
actualizaciones)
• Actualización
• Un mismo registro es actualizado en D1 y en D2, para la actualización se debe
registrar una marca timestamp, el último registro actualizado prevalece sobre el
primero, en el backend se guarda la marca del timestamp para determinar cual fue el
ultimo actualizado
• Eliminación
• Un registro es eliminado en D1 y es editado en D2, al actualizar D1 en el backend el
registro no se elimina físicamente, se hace un marcado de eliminación, al sincronizar
D2 se verifica la marca de fecha y se determina si el registro continúa marcado como
eliminado o se revive con la información de D2.
9. Pero igual necesito conexión
Instalación
Autenticación
Búsqueda
Adjuntar archivos
Sincronizar (segmentar)
10. LINKS IMPORTANTES
MAUI Documentation
https://docs.microsoft.com/en-us/dotnet/maui/
Store local data with SQLite in a .NET MAUI app
https://docs.microsoft.com/es-es/learn/modules/store-local-data/
MAUI Connectivity
https://docs.microsoft.com/es-es/dotnet/maui/platform-integration/communication/networking
A Design Guide for Building Offline First Apps
https://hasura.io/blog/design-guide-to-offline-first-apps/
Robinson Moscoso
https://twitter.com/rmoscosp
https://www.linkedin.com/in/robinson-moscoso-perez/
11. Ahora, lo que todos quieren
https://forms.gle/xrCJposRAyo2Ur
Pi8
• Cursos de Udemy a nivel global (3)
• Morral, Audífonos, Curso de Udemy (3)