Dodawanie synchronizacji danych w trybie offline do aplikacji platformy Xamarin.Forms

W tym samouczku omówiono funkcję synchronizacji offline usługi Azure Mobile Apps for Xamarin Forms. Synchronizacja w trybie offline umożliwia użytkownikom końcowym interakcję z aplikacją mobilną — wyświetlanie, dodawanie lub modyfikowanie danych — nawet wtedy, gdy nie ma połączenia sieciowego. Zmiany są przechowywane w lokalnej bazie danych. Po powrocie urządzenia do trybu online te zmiany są synchronizowane ze zdalnym zapleczem.

Przed rozpoczęciem tego samouczka należy ukończyć samouczek Szybki start platformy Xamarin.Forms, który obejmuje tworzenie odpowiedniej usługi zaplecza.

Aby dowiedzieć się więcej na temat funkcji synchronizacji offline, zobacz temat Offline Data Sync in Azure Mobile Apps (Synchronizacja danych w trybie offline w usłudze Azure Mobile Apps).

Aktualizowanie aplikacji w celu obsługi synchronizacji w trybie offline

W przypadku operacji online odczytujesz i zapisujesz dane z obiektu IRemoteTable<T>. Podczas korzystania z synchronizacji w trybie offline odczytujesz i zapisujesz dane z elementu IOfflineTable<T> . Element IOfflineTable jest wspierany przez bazę danych SQLite na urządzeniu i synchronizowany z bazą danych zaplecza.

W programie Visual Studio:

  1. Kliknij rozwiązanie prawym przyciskiem myszy TodoApp , a następnie wybierz polecenie Zarządzaj pakietami NuGet dla rozwiązania....

  2. Na nowej karcie wybierz pozycję Przeglądaj, a następnie wprowadź ciąg Microsoft.Datasync.Client w polu wyszukiwania.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Microsoft.Datasync.Client.SQLiteStore Wybierz pakiet.

  4. W okienku po prawej stronie wybierz wszystkie projekty klienckie (z wyjątkiem TodoAppService.NET6 projektu).

  5. Wybierz Zainstaluj.

  6. Zaakceptuj umowę licencyjną po wyświetleniu monitu.

Aktualizowanie klienta usługi zdalnej

Otwórz projekt i znajdź klasę TodoApp.DataRemoteTodoService.cs (w Services katalogu). Zaktualizuj klasę w następujący sposób:

  1. Dodaj następującą using instrukcję na początku pliku:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Zmień definicję elementu _table na :IOfflineTable<TodoItem>

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Dodaj nową właściwość do przechowywania lokalizacji bazy danych w trybie offline:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Zaktualizuj metodę InitializeAsync , aby zdefiniować bazę danych w trybie 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;
    
  5. Zaktualizuj polecenie , aby wykonać synchronizację RefreshItemsAsync() w trybie 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;
    }
    

Ustawianie lokalizacji bazy danych w trybie offline

W projekcie zmodyfikuj TodoApp.FormsApp.xaml.cs plik. Zmień definicję elementu w RemoteTodoService następujący sposób:

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Jeśli nie ukończono samouczka uwierzytelniania, definicja powinna wyglądać następująco:

TodoService = new RemoteTodoService()
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Testowanie aplikacji

Aplikacja nie synchronizuje się z zapleczem do momentu naciśnięcia ikony odświeżania. Aby przetestować:

  1. Otwórz portal Azure Portal.

  2. Otwórz grupę zasobów zawierającą zasoby na potrzeby przewodnika Szybki start.

  3. quickstart Wybierz bazę danych.

  4. Wybierz edytor zapytań (wersja zapoznawcza).

  5. Zaloguj się przy użyciu uwierzytelniania programu SQL Server przy użyciu tych samych poświadczeń skonfigurowanych dla bazy danych.

    • W razie potrzeby zostanie wyświetlony monit o zezwolenie na dostęp do adresu IP. Wybierz link, aby zaktualizować listę dozwolonych, a następnie naciśnij przycisk OK , aby ponowić próbę zalogowania.
  6. W edytorze zapytań wprowadź .SELECT * FROM [dbo].[TodoItems] Następnie wybierz opcję Uruchom.

Zostanie wyświetlona lista bieżących zadań do wykonania.

Screenshot of the results in the S Q L query editor.

Teraz wprowadź pewne zmiany w aplikacji. NIE NACISKAJ JESZCZE PRZYCISKU ODŚWIEŻ .

Powtórz instrukcję SQL w witrynie Azure Portal i sprawdź, czy w bazie danych nie wprowadzono żadnych zmian.

Wybierz ikonę Odśwież w aplikacji, aby wypchnąć dane w kolejce do usługi zaplecza. W oknie Debugowanie danych wyjściowych zobaczysz transakcje HTTP.

Powtórz instrukcję SQL w witrynie Azure Portal i sprawdź, czy zmiany zostały wypchnięte do usługi zdalnej.

Czyszczenie zasobów

Jeśli nie wykonujesz innego samouczka Szybkiego startu, możesz teraz usunąć zasoby skojarzone z usługą zaplecza.

  1. Otwórz portal Azure Portal.
  2. Wybierz grupę zasobów zawierającą zasoby szybkiego startu.
  3. Wybierz pozycję Usuń grupę zasobów.
  4. Postępuj zgodnie z instrukcjami, aby potwierdzić usunięcie.

Możesz również użyć interfejsu wiersza polecenia platformy Azure:

az group delete -g quickstart

Jeśli do wdrażania zasobów użyto interfejsu wiersza polecenia dla deweloperów platformy Azure, możesz zamiast tego użyć azd down polecenia .

Usunięcie potrwa kilka minut.

Następne kroki