Adición de sincronización de datos sin conexión a la aplicación de Xamarin.Android
En este tutorial se describe la característica de sincronización sin conexión de Azure Mobile Apps para la aplicación de inicio rápido de Xamarin.Android. La sincronización sin conexión permite a los usuarios finales interactuar con una aplicación móvil (ver, agregar o modificar datos), incluso cuando no hay ninguna conexión de red. Los cambios se almacenan en una base de datos local. Una vez que el dispositivo se vuelve a conectar, estos cambios se sincronizan con el back-end remoto.
Antes de comenzar este tutorial, debe haber completado el tutorial de inicio rápido de Xamarin.Android, que incluye la creación de un servicio back-end adecuado. También se supone que ha agregado autenticación a la aplicación. Sin embargo, esto es opcional.
Actualización de la aplicación para que admita la sincronización sin conexión
En la operación en línea, las lecturas y escrituras se realizan desde un elemento IRemoteTable<T>
. En cambio, al usar la sincronización sin conexión, se realizan desde un elemento IOfflineTable<T>
. El elemento IOfflineTable
está respaldo por una base de datos SQLite en el dispositivo, y se sincroniza con la base de datos back-end.
En Visual Studio:
Haga clic con el botón derecho en la
TodoApp
solución y seleccione Administrar paquetes NuGet para la solución....En la nueva pestaña, seleccione Examinar y escriba Microsoft.Datasync.Client en el cuadro de búsqueda.
Seleccione el paquete
Microsoft.Datasync.Client.SQLiteStore
.En el panel derecho, seleccione todos los proyectos cliente (excepto el
TodoAppService.NET6
proyecto).Seleccione Instalar.
Acepte el contrato de licencia cuando se le solicite.
Actualización del cliente de servicio remoto
Abra el TodoApp.Data
proyecto y busque la RemoteTodoService.cs
clase (dentro del Services
directorio). Actualice la clase de la siguiente manera:
Agregue la siguiente instrucción
using
al principio del archivo:using Microsoft.Datasync.Client.SQLiteStore;
Cambie la definición de
_table
para que sea :IOfflineTable<TodoItem>
/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Agregue una nueva propiedad para almacenar la ubicación de la base de datos sin conexión:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Actualice el
InitializeAsync
método para definir la base de datos sin conexión:// Create the offline store definition var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString(); var store = new OfflineSQLiteStore(connectionString); store.DefineTable<TodoItem>(); var options = new DatasyncClientOptions { OfflineStore = store, HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() } }; // Create the datasync client. _client = TokenRequestor == null ? new DatasyncClient(Constants.ServiceUri, options) : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options); // Initialize the database await _client.InitializeOfflineStoreAsync(); // Get a reference to the offline table. _table = _client.GetOfflineTable<TodoItem>(); // Set _initialized to true to prevent duplication of locking. _initialized = true;
Actualice para realizar la
RefreshItemsAsync()
sincronización sin conexión:/// <summary> /// Refreshes the TodoItems list manually. /// </summary> /// <returns>A task that completes when the refresh is done.</returns> public async Task RefreshItemsAsync() { await InitializeAsync(); // First, push all the items in the table. await _table.PushItemsAsync(); // Then, pull all the items in the table. await _table.PullItemsAsync(); return; }
Establecimiento de la ubicación de la base de datos sin conexión
En el TodoApp.Android
proyecto, edite el App.xaml.cs
archivo. Cambie la definición de como RemoteTodoService
se indica a continuación:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Si no ha completado el tutorial de autenticación, la definición debe tener este aspecto en su lugar:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Prueba de la aplicación
La aplicación no se sincroniza con el back-end hasta que se presiona el icono de actualización. Para probar:
Abra Azure Portal.
Abra el grupo de recursos que contiene los recursos del inicio rápido.
Seleccione la
quickstart
base de datos.Seleccione el Editor de consultas (versión preliminar).
Inicie sesión con la autenticación de SQL Server con las mismas credenciales que configuró para la base de datos.
- Si es necesario, se le pedirá que permita el acceso a la dirección IP. Seleccione el vínculo para actualizar la lista de permitidos y presione Aceptar para volver a intentar el inicio de sesión.
En el editor de consultas, escriba
SELECT * FROM [dbo].[TodoItems]
. A continuación seleccione Ejecutar.
Se mostrará una lista de todoItems actuales.
Ahora, realice algunos cambios a través de la aplicación. NO PRESIONE ACTUALIZAR (todavía).
Repita la instrucción SQL en Azure Portal y compruebe que no se han realizado cambios en los datos de la base de datos.
Seleccione el icono Actualizar de la aplicación para insertar los datos en cola en el servicio back-end. Verá que las transacciones HTTP se producen en la ventana Depuración de salida.
Repita la instrucción SQL en Azure Portal y compruebe que los cambios se han insertado en el servicio remoto.
Limpieza de recursos
A menos que realice otro tutorial de inicio rápido, puede eliminar los recursos asociados al servicio back-end ahora.
- Abra Azure Portal.
- Seleccione el grupo de recursos que contiene los recursos de inicio rápido.
- Seleccione Eliminar grupo de recursos.
- Siga las instrucciones para confirmar la eliminación.
También puede usar la CLI de Azure:
az group delete -g quickstart
Si usó la CLI para desarrolladores de Azure para implementar recursos, puede usar el azd down
comando en su lugar.
La eliminación tardará unos minutos en completarse.
Pasos siguientes
- Revise la documentación de PROCEDIMIENTOS:
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de