Adicionar sincronização de dados offline ao seu aplicativo MAUI do .NET
Nota
Este produto está desativado. Para obter uma substituição para projetos que usam o .NET 8 ou posterior, consulte a biblioteca datasync do Kit de Ferramentas da Comunidade .
Este tutorial aborda o recurso de sincronização offline dos Aplicativos Móveis do Azure para .NET MAUI. A sincronização offline permite que os usuários finais interajam com um aplicativo móvel mesmo quando não há nenhuma conexão de rede. As alterações são armazenadas em um banco de dados local. Depois que 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 de Tutorial de Início Rápido do .NET MAUI, que inclui a criação de um serviço de back-end adequado.
Para saber mais sobre o recurso de sincronização offline, consulte o tópico Sincronização de Dados Offline nos Aplicativos Móveis do Azure.
Atualizar o aplicativo para dar suporte à sincronização offline
Na operação online, você lê e grava de um IRemoteTable<T>
. Ao usar a sincronização offline, você lê e grava 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 de 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....Na nova guia, selecione Procurare, em seguida, insira Microsoft.Datasync.Client na caixa de pesquisa.
Selecione o pacote de
Microsoft.Datasync.Client.SQLiteStore
.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 de TodoApp.Data
e localize a classe RemoteTodoService.cs
(dentro do diretório Services
). Atualize a classe da seguinte maneira:
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.MAUI
, edite o arquivo MainPage.xaml.cs
. Altere a definição do RemoteTodoService
da seguinte maneira:
TodoService = new RemoteTodoService(GetAuthenticationToken)
{
OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};
Se você ainda não concluiu o tutorial de autenticação , a definição deverá ter esta aparência:
TodoService = new RemoteTodoService()
{
OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};
Testar o aplicativo
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 (versão prévia).
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, você será solicitado a permitir o acesso ao seu endereço IP. Selecione o link para atualizar a lista de permissões e pressione OK para tentar novamente o logon.
No editor de consultas, insira
SELECT * FROM [dbo].[TodoItems]
. Em seguida, selecione Executar.
Uma lista dos TodoItems atuais será exibida.
Agora, faça algumas alterações por meio do aplicativo. NÃO PRESSIONE DE ATUALIZAÇÃO (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 efetuar push dos 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 suas 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, exclua 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
.
A exclusão levará alguns minutos para ser concluída.
Próximas etapas
- Examine a documentação de COMO FAZER: