Kapcsolat nélküli adatszinkronizálás hozzáadása a Xamarin.Android-alkalmazáshoz

Ez az oktatóanyag az Azure Mobile Apps offline szinkronizálási funkcióját ismerteti a Xamarin.Android gyorsútmutató-alkalmazáshoz. Az offline szinkronizálással a végfelhasználók akkor is használhatják a mobilalkalmazásokat – adatok megtekintését, hozzáadását vagy módosítását –, ha nincs hálózati kapcsolat. A módosítások helyi adatbázisban vannak tárolva. Az eszköz online állapotba helyezése után a rendszer szinkronizálja ezeket a módosításokat a távoli háttérrendszerrel.

Az oktatóanyag megkezdése előtt el kell végeznie a Xamarin.Android rövid útmutatót, amely magában foglalja a megfelelő háttérszolgáltatás létrehozását. Azt is feltételezzük, hogy hozzáadott hitelesítést az alkalmazáshoz. Ez azonban nem kötelező.

Az alkalmazás frissítése az offline szinkronizálás támogatásához

Az online művelet során egy IRemoteTable<T>. Offline szinkronizálás használata esetén ehelyett olvasási és írási műveletet IOfflineTable<T> kell elvégeznie. A IOfflineTable háttéradatbázist egy eszközalapú SQLite-adatbázis készíti, és szinkronizálja a háttéradatbázissal.

A Visual Studióban:

  1. Kattintson a jobb gombbal a TodoApp megoldásra, majd válassza a Megoldáshoz készült NuGet-csomagok kezelése... lehetőséget.

  2. Az új lapon válassza a Tallózás lehetőséget, majd írja be a Microsoft.Datasync.Client kifejezést a keresőmezőbe.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Válassza ki a Microsoft.Datasync.Client.SQLiteStore csomagot.

  4. A jobb oldali panelen válassza ki az összes ügyfélprojektet (kivéve a TodoAppService.NET6 projektet).

  5. Válassza a Telepítés lehetőséget.

  6. Amikor a rendszer kéri, fogadja el a licencszerződést.

A távoli szolgáltatásügyfél frissítése

Nyissa meg a TodoApp.Data projektet, és keresse meg az RemoteTodoService.cs osztályt (a könyvtárban Services ). Frissítse az osztályt az alábbiak szerint:

  1. Adja hozzá a következő using utasítást a fájl elejéhez:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Módosítsa a definíciót _tableIOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Adjon hozzá egy új tulajdonságot az offline adatbázis helyének tárolásához:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Frissítse a metódust az InitializeAsync offline adatbázis definiálásához:

    // 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. Frissítse az RefreshItemsAsync() offline szinkronizálást:

    /// <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;
    }
    

Az offline adatbázis helyének beállítása

A projektben TodoApp.Android szerkessze a App.xaml.cs fájlt. Módosítsa a definíciót az RemoteTodoService alábbiak szerint:

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

Ha még nem fejezte be a hitelesítési oktatóanyagot, a definíciónak a következőképpen kell kinéznie:

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

Az alkalmazás tesztelése

Az alkalmazás nem szinkronizálódik a háttérrendszerrel, amíg a frissítés ikonja nem lesz lenyomva. Tesztelés:

  1. Nyissa meg az Azure Portalt.

  2. Nyissa meg a rövid útmutatóhoz tartozó erőforrásokat tartalmazó erőforráscsoportot.

  3. Válassza ki az adatbázist quickstart .

  4. Válassza ki a Lekérdezésszerkesztőt (előzetes verzió).

  5. Jelentkezzen be SQL Server-hitelesítéssel az adatbázishoz beállított hitelesítő adatokkal.

    • Ha szükséges, a rendszer kérni fogja, hogy engedélyezze az IP-címhez való hozzáférést. Kattintson a hivatkozásra az engedélyezési lista frissítéséhez, majd az OK billentyű lenyomásával próbálkozzon újra a bejelentkezéssel.
  6. A lekérdezésszerkesztőben adja meg a következőt SELECT * FROM [dbo].[TodoItems]: Ezután válassza a Futtatás lehetőséget.

Megjelenik az aktuális todoItemek listája.

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

Most végezze el a módosításokat az alkalmazáson keresztül. NE NYOMJA LE A FRISSÍTÉS BILLENTYŰT (még).

Ismételje meg az SQL-utasítást az Azure Portalon, és ellenőrizze, hogy nem történt-e módosítás az adatbázisban lévő adatokon.

Válassza az alkalmazás Frissítés ikonját az adatok várólistába helyezéséhez a háttérszolgáltatásba. A HTTP-tranzakciók a Kimeneti hibakeresés ablakban fognak megjelenni.

Ismételje meg az SQL-utasítást az Azure Portalon, és ellenőrizze, hogy a módosítások le lettek-e küldve a távoli szolgáltatásba.

Az erőforrások eltávolítása

Ha nem végez újabb gyors üzembe helyezési oktatóanyagot, törölheti a háttérszolgáltatáshoz társított erőforrásokat.

  1. Nyissa meg az Azure Portalt.
  2. Válassza ki a gyorsindítási erőforrásokat tartalmazó erőforráscsoportot.
  3. Válassza az Erőforráscsoport törlése elemet.
  4. Kövesse az utasításokat a törlés megerősítéséhez.

Az Azure CLI-t is használhatja:

az group delete -g quickstart

Ha az Azure Developer CLI-t használta az erőforrások üzembe helyezéséhez, használhatja helyette a azd down parancsot.

A törlés néhány percet vesz igénybe.

Következő lépések