Adicionar sincronização de dados offline a um aplicativo Xamarin.Android
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 o tutorial, você deve ter concluído o Tutorial de início rápido do Xamarin.Android, que inclui a criação de um serviço de back-end adequado. Também presumimos que você adicionou autenticação ao seu aplicativo. No entanto, isso é opcional.
Atualizar o aplicativo para dar suporte à sincronização offline
Na operação online, você lê e grava de um IRemoteTable<T>
. Usando a sincronização offline, você lê e grava de um IOfflineTable<T>
. O IOfflineTable
tem suporte de 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
TodoApp
mouse na solução e selecione Gerenciar pacotes NuGet para solução....Na nova guia, selecione Procurar e digite Microsoft.Datasync.Client na caixa de pesquisa.
Selecione o pacote
Microsoft.Datasync.Client.SQLiteStore
.No painel direito, selecione todos os projetos cliente (exceto o
TodoAppService.NET6
projeto).Selecione Instalar.
Aceite o contrato de licença quando solicitado.
Atualizar o cliente de serviço remoto
Abra o TodoApp.Data
projeto e localize a RemoteTodoService.cs
classe (dentro do Services
diretório). Atualize a classe da seguinte maneira:
Adicione a instrução
using
a seguir à parte superior do arquivo:using Microsoft.Datasync.Client.SQLiteStore;
Altere a definição de
_table
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 para definir o
InitializeAsync
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 a
RefreshItemsAsync()
sincronização offline para fazer:/// <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, edite o TodoApp.Android
App.xaml.cs
arquivo. Altere a definição do RemoteTodoService
seguinte:
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 a seguinte aparência:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/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
quickstart
banco de dados.Selecione o Editor de consultas (visualização).
Faça logon com a autenticação do SQL Server usando as mesmas credenciais configuradas 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 login.
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 seu aplicativo. NÃO PRESSIONE ATUALIZAR (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 em 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 os 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.
Também é possível usar o CLI do Azure:
az group delete -g quickstart
Se você usou a CLI do Desenvolvedor do Azure para implantar recursos, poderá usar o azd down
comando.
A exclusão levará alguns minutos para ser concluída.
Próximas etapas
- Revise a documentação HOW:
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de