Megosztás a következőn keresztül:


A Xamarin.Forms-mobilalkalmazás offline szinkronizálásának engedélyezése

Áttekintés

Ez az oktatóanyag bemutatja az Azure Mobile Apps for Xamarin.Forms offline szinkronizálási funkcióját. Az offline szinkronizálás lehetővé teszi a végfelhasználók számára az adatok megtekintését, hozzáadását és módosítását a mobilalkalmazásokkal– még akkor is, ha nincs hálózati kapcsolat. A módosításokat a rendszer egy helyi adatbázisban tárolja. Miután az eszköz ismét online állapotba áll, a rendszer szinkronizálja ezeket a módosításokat a távoli szolgáltatással.

Ez az oktatóanyag a Xamarin.Forms gyorsindítási megoldásán alapul, Mobile Apps a [Xamarin iOS-alkalmazás létrehozása] oktatóanyag befejezésekor fog létrehozni. A Xamarin.Forms gyorsindítási megoldása tartalmazza az offline szinkronizálást támogató kódot, amelyet csak engedélyezni kell. Ebben az oktatóanyagban frissíti a gyorsindítási megoldást, hogy bekapcsolja az Azure Mobile Apps. Az alkalmazás offline-specifikus kódját is kiemeljük. Ha nem használja a letöltött gyorsindítási megoldást, hozzá kell adni az adatelérési bővítménycsomagokat a projekthez. További információ a kiszolgálóbővítmény-csomagokról: Az Azure-hoz készült .NET háttérkiszolgálói SDK Mobile Apps.

Az offline szinkronizálási funkcióval kapcsolatos további információkért tekintse meg az Offline adatszinkronizálás az Azure Mobile Apps.

Offline szinkronizálási funkció engedélyezése a gyorsindítási megoldásban

Az offline szinkronizálási kód A C# előprocesszori irányelvekkel szerepel a projektben. A OFFLINE_SYNC_ENABLED szimbólum meghatározásakor ezek a kódútvonalak szerepelnek a buildben. A Windows SQLite platformot is telepítenie kell.

  1. A Visual Studio kattintson a jobb gombbal a Manage NuGet Packages for Solution... (NuGet-csomagok> kezelése a megoldáshoz... ) megoldásra, majd keresse meg és telepítse a Megoldás összes projektje számára elérhető Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-csomagot.

  2. A Megoldáskezelő nyissa meg a TodoItemManager.cs fájlt a projektből a Portable (Hordozható) névvel, amely Portable Class Library project (Hordozható osztálytár projekt) névvel, majd a következő előprocesszori irányelvtől való eltekeréstől:

     #define OFFLINE_SYNC_ENABLED
    
  3. (Nem kötelező) A Windows támogatásához telepítse az alábbi SQLite-runtime-csomagok egyikét:

  4. (Nem kötelező) Az alkalmazásprojektek Windows kattintson a jobb gombbal a ReferencesAdd>Reference...> (Hivatkozások referenciák Windows) elemre. Engedélyezze a megfelelő SQLite-t az Windows SDK-hoz, valamint a Visual C++ 2013 Runtime for Windows SDK-t. Az SQLite SDK-nevek kis mértékben eltérőek lehetnek az egyes Windows platform esetében.

Az ügyfél-szinkronizálási kód áttekintése

Itt röviden áttekintheti, hogy mi szerepel már az irányelvekben található oktatóanyag kódban #if OFFLINE_SYNC_ENABLED . Az offline szinkronizálási funkció a Portable Class Library projekt TodoItemManager.cs projektfájljában található. A funkció fogalmi áttekintését lásd: Offline adatszinkronizálás az Azure Mobile Apps.

  • A táblaműveletek végrehajtásához inicializálni kell a helyi tárolót. A helyi tároló adatbázisa a TodoItemManager osztály konstruktorában van inicializálva az alábbi kóddal:

      var store = new MobileServiceSQLiteStore(OfflineDbPath);
      store.DefineTable<TodoItem>();
    
      //Initializes the SyncContext using the default IMobileServiceSyncHandler.
      this.client.SyncContext.InitializeAsync(store);
    
      this.todoTable = client.GetSyncTable<TodoItem>();
    

    Ez a kód létrehoz egy új helyi SQLite-adatbázist a MobileServiceSQLiteStore osztály használatával.

    A DefineTable metódus létrehoz egy táblát a helyi tárolóban, amely megfelel a megadott típus mezőinek. A típusnak nem kell tartalmaznia a távoli adatbázisban lévő összes oszlopot. Az oszlopok egy részkészlete tárolható.

  • A TodoItemManager todoTable mezője IMobileServiceSyncTable típusú az IMobileServiceTable helyett. Ez az osztály a helyi adatbázist használja az összes létrehozási, olvasási, frissítési és törlési (CRUD) táblaművelethez. Az IMobileServiceSyncContext metódus PushAsync metódusának hívásával eldöntheti, hogy a rendszer mikor továbbküldi ezeket a módosításokat a Mobile App háttéralkalmazásába. A szinkronizálási környezet segít megőrizni a táblakapcsolatokat azáltal, hogy az ügyfélalkalmazás által a PushAsync hívatáskor módosított összes táblában követi és lekért módosításokat.

    A Mobile App háttéralkalmazással való szinkronizáláshoz a következő SyncAsync metódust hívjuk meg:

      public async Task SyncAsync()
      {
          ReadOnlyCollection<MobileServiceTableOperationError> syncErrors = null;
    
          try
          {
              await this.client.SyncContext.PushAsync();
    
              await this.todoTable.PullAsync(
                  "allTodoItems",
                  this.todoTable.CreateQuery());
          }
          catch (MobileServicePushFailedException exc)
          {
              if (exc.PushResult != null)
              {
                  syncErrors = exc.PushResult.Errors;
              }
          }
    
          // Simple error/conflict handling.
          if (syncErrors != null)
          {
              foreach (var error in syncErrors)
              {
                  if (error.OperationKind == MobileServiceTableOperationKind.Update && error.Result != null)
                  {
                      //Update failed, reverting to server's copy.
                      await error.CancelAndUpdateItemAsync(error.Result);
                  }
                  else
                  {
                      // Discard local change.
                      await error.CancelAndDiscardItemAsync();
                  }
    
                  Debug.WriteLine(@"Error executing sync operation. Item: {0} ({1}). Operation discarded.",
                      error.TableName, error.Item["id"]);
              }
          }
      }
    

    Ez a minta egyszerű hibakezelést használ az alapértelmezett szinkronizáláskezelővel. Egy valós alkalmazás egy egyéni IMobileServiceSyncHandler implementációval kezeli a különböző hibákat, például a hálózati feltételeket és a kiszolgálóütközéseket.

Offline szinkronizálással kapcsolatos szempontok

A mintában a SyncAsync metódust csak indításkor és szinkronizálás kérése esetén hívjuk meg. Egy Android- vagy iOS-alkalmazásban a szinkronizálás kezdeményezéséhez húzza le az elemlistát; A Windows kattintson a Szinkronizálás gombra. Egy valós alkalmazásban a szinkronizálás akkor is elindítható, ha a hálózati állapot megváltozik.

Ha olyan táblán hajt végre leküldést, amely a környezet által nyomon követni függőben lévő helyi frissítéseket tartalmazza, a leküldéses művelet automatikusan elindít egy korábbi környezetbeli leküldést. A mintában található elemek frissítéseke, hozzáadása és befejezésekor kihagyhatja az explicit PushAsync hívást .

A megadott kódban a távoli TodoItem tábla összes rekordja lekérdezhető, de a rekordok szűrhetők is egy lekérdezésazonosító és a PushAsync lekérdezés átadásával. További információ: Növekményes szinkronizálás offline módban adatszinkronizálás Azure Mobile Apps.

Az ügyfélalkalmazás futtatása

Most, hogy engedélyezve van az offline szinkronizálás, futtassa legalább egyszer az ügyfélalkalmazást minden platformon a helyi tároló adatbázisának feltöltéséhez. Később szimulálhat offline forgatókönyvet, és módosíthatja a helyi áruházban tárolt adatokat, amíg az alkalmazás offline állapotban van.

Az ügyfélalkalmazás szinkronizálási viselkedésének frissítése

Ebben a szakaszban módosítsa az ügyfélprojektet úgy, hogy offline forgatókönyvet szimulál, érvénytelen alkalmazás-URL-címet használva a háttéralkalmazáshoz. Másik lehetőségként kikapcsolhatja a hálózati kapcsolatokat az eszköz "Repülőgép üzemmódba" való áthelyezésével. Adatelemek hozzáadásakor vagy módosításakor ezek a módosítások a helyi tárolóban tárolódnak, de nem szinkronizálódnak a háttéradattárba a kapcsolat újra létrejötte előtt.

  1. A Megoldáskezelő nyissa meg a Constants.cs projektfájlt a PortableApplicationURL projektből, és módosítsa a értékét úgy, hogy érvénytelen URL-címre mutasson:

     public static string ApplicationURL = @"https://your-service.azurewebsites.net/";
    
  2. Nyissa meg a TodoItemManager.cs fájlt a Portable projektből, majd adjon hozzá egy catchet az alap Exception osztályhoz a try... catch blokk a SyncAsyncben. Ez a catch blokk a következőképpen írja a kivételüzenetet a konzolra:

         catch (Exception ex)
         {
             Console.Error.WriteLine(@"Exception: {0}", ex.Message);
         }
    
  3. Az ügyfélalkalmazás összeállítása és futtatása. Adjon hozzá néhány új elemet. Figyelje meg, hogy a rendszer kivételt naplóz a konzolon a háttéralkalmazással való szinkronizálás minden egyes kísérletekor. Ezek az új elemek csak a helyi tárolóban léteznek, amíg le nem lehet őketküldeni a mobil háttérnek. Az ügyfélalkalmazás úgy viselkedik, mintha a háttérhez csatlakozik, és támogat minden létrehozási, olvasási, frissítési, törlési (CRUD) műveletet.

  4. Zárja be az alkalmazást, és indítsa újra annak ellenőrzéséhez, hogy a létrehozott új elemek megmaradnak-e a helyi áruházban.

  5. (Nem kötelező) A Visual Studio használatával megtekintheti a Azure SQL Database táblát, és láthatja, hogy a háttéradatbázis adatai nem változtak.

    A Visual Studio nyissa meg a Kiszolgálókezelőt. Lépjen az adatbázisra az Azure-SQL>adatbázisokban. Kattintson a jobb gombbal az adatbázisra, és válassza a Megnyitás a SQL Server Object Explorer. Most már tallózhat a SQL adatbázistáblához és annak tartalmához.

Az ügyfélalkalmazás frissítése a mobil háttéralkalmazás újracsatlakozáshoz

Ebben a szakaszban csatlakoztassa újra az alkalmazást a mobil háttéralkalmazáshoz, amely azt szimulálja, hogy az alkalmazás visszatér online állapotba. A frissítési kézmozdulat végrehajtásakor a rendszer szinkronizálja az adatokat a mobil háttéralkalmazással.

  1. Nyissa meg újra a Constants.cs-t. Javítsa ki a applicationURL et, hogy a megfelelő URL-címre mutasson.

  2. Építse újra és futtassa az ügyfélalkalmazást. Az alkalmazás indítás után megpróbál szinkronizálni a mobilalkalmazás háttéralkalmazásával. Ellenőrizze, hogy a hibakeresési konzol nem naplózza-e a kivételeket.

  3. (Nem kötelező) Tekintse meg a frissített adatokat egy SQL Server Object Explorer rest eszköz, például a Fiddler vagy a Postman használatával. Figyelje meg, hogy az adatok szinkronizálva vannak a háttéradatbázis és a helyi tároló között.

    Figyelje meg, hogy az adatok szinkronizálva vannak az adatbázis és a helyi tároló között, és az alkalmazás leválasztása közben hozzáadott elemeket is tartalmazza.

További források