Adicionar sincronização de dados offline ao seu aplicativo Xamarin.Android
Observação
Este produto foi retirado. Para obter uma substituição para projetos que usam o .NET 8 ou posterior, consulte a biblioteca Community Toolkit Datasync.
Este tutorial aborda o recurso de sincronização offline dos Aplicativos Móveis do Azure para o aplicativo de início rápido Xamarin.Android. A sincronização offline permite que os usuários finais interajam com um aplicativo móvel, visualizando, adicionando ou modificando dados, mesmo quando não há conexão de rede. As alterações são armazenadas em um banco de dados local. Quando o dispositivo estiver online novamente, essas alterações serão sincronizadas com o back-end remoto.
Antes de iniciar este tutorial, você deve ter concluído o Xamarin.Android Quickstart Tutorial, que inclui a criação de um serviço de back-end adequado. Também assumimos que adicionou de autenticação à sua aplicação. No entanto, isso é opcional.
Atualizar a aplicação para suportar a sincronização offline
Na operação on-line, você lê e escreve a partir de um IRemoteTable<T>
. Ao usar a sincronização offline, você lê e grava a partir de um IOfflineTable<T>
em vez disso. O IOfflineTable
é apoiado por um banco de dados SQLite no dispositivo e sincronizado com o banco de dados back-end.
No Visual Studio:
Clique com o botão direito do mouse na solução
TodoApp
e selecione Gerenciar pacotes NuGet para solução....No novo separador, selecione Procurare, em seguida, introduza Microsoft.Datasync.Client na caixa de pesquisa.
Selecione o
Microsoft.Datasync.Client.SQLiteStore
pacote.No painel direito, selecione todos os projetos cliente (exceto o projeto
TodoAppService.NET6
).Selecione Instalar.
Aceite o contrato de licença quando solicitado.
Atualizar o cliente de serviço remoto
Abra o projeto TodoApp.Data
e localize a classe RemoteTodoService.cs
(dentro do diretório Services
). Atualize a classe da seguinte forma:
Adicione a seguinte instrução
using
à parte superior do arquivo:using Microsoft.Datasync.Client.SQLiteStore;
Altere a definição de
_table
para ser umIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Adicione uma nova propriedade para armazenar o local do banco de dados offline:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Atualize o método
InitializeAsync
para definir o banco de dados offline:// 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;
Atualize o
RefreshItemsAsync()
para fazer a sincronização offline:/// <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; }
Definir o local do banco de dados offline
No projeto TodoApp.Android
, edite o arquivo App.xaml.cs
. Altere a definição do RemoteTodoService
da seguinte forma:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Se você não tiver concluído o tutorial de autenticação , a definição deverá ter esta aparência:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Testar a aplicação
O aplicativo não sincroniza com o back-end até que o ícone de atualização seja pressionado. Para testar:
Abra o portal do Azure.
Abra o grupo de recursos que contém os recursos para o início rápido.
Selecione o banco de dados
quickstart
.Selecione o Editor de consultas (visualização).
Faça logon com a autenticação do SQL Server usando as mesmas credenciais que você configurou para o banco de dados.
- Se necessário, ser-lhe-á pedido que permita o acesso ao seu endereço IP. Selecione o link para atualizar a lista de permissões e pressione OK para tentar novamente o login.
No editor de consultas, digite
SELECT * FROM [dbo].[TodoItems]
. Em seguida, selecione Executar.
Uma lista dos TodoItems atuais será exibida.
Agora, faça algumas alterações através do seu aplicativo. NÃO PRESSIONE REFRESH (ainda).
Repita a instrução SQL no portal do Azure e verifique se nenhuma alteração foi feita nos dados no banco de dados.
Selecione o ícone Atualizar em seu aplicativo para enviar os dados na fila para o serviço de back-end. Você verá as transações HTTP acontecendo na janela Depuração de saída.
Repita a instrução SQL no portal do Azure e verifique se as alterações foram enviadas por push para o serviço remoto.
Limpar recursos
A menos que você esteja fazendo outro tutorial de início rápido, você pode excluir os recursos associados ao serviço de back-end agora.
- Abra o portal do Azure.
- Selecione o grupo de recursos que contém os recursos de início rápido.
- Selecione Excluir grupo de recursos.
- Siga as instruções para confirmar a exclusão.
Você também pode usar a CLI do Azure:
az group delete -g quickstart
Se você usou a CLI do Desenvolvedor do Azure para implantar recursos, poderá usar o comando azd down
em vez disso.
A exclusão levará alguns minutos para ser concluída.
Próximos passos
- Reveja a documentação COMO:
- ASP. Documentação do serviço NET6
- de documentação do cliente .NET