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

Ez az oktatóanyag az Azure Mobile Apps for Xamarin.iOS offline szinkronizálási funkcióját ismerteti. 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 be kellett fejeznie a Xamarin.iOS rövid útmutatóját, amely magában foglalja a megfelelő háttérszolgáltatás létrehozását.

Az offline szinkronizálási funkcióval kapcsolatos további információkért tekintse meg az Offline adatszinkronizálás az Azure Mobile Appsben című témakört.

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.iOS szerkessze a ViewControllers\HomeViewController.cs fájlt. Módosítsa a konstruktor definícióját RemoteTodoService az 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