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


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

Áttekintés

Ez az oktatóanyag bemutatja az Azure Mobile Apps for Xamarin.Android 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.

Ebben az oktatóanyagban frissíteni fogja az ügyfélprojektet a Xamarin Android-alkalmazás létrehozása oktatóanyagból az Azure Mobile Apps. Ha nem használja a letöltött gyors indítási kiszolgálóprojektet, 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.

Az ügyfélalkalmazás frissítése az offline funkciók támogatásához

Az Azure Mobile App offline funkciói lehetővé teszik a helyi adatbázissal való interakciót offline forgatókönyv esetén. Ha ezeket a funkciókat az alkalmazásban használni tudja, inicializáljon egy SyncContext adatokat egy helyi áruházba. Ezután hivatkozhat a táblára az IMobileServiceSyncTable felületen keresztül. Az SQLite az eszköz helyi tárolója.

  1. A Visual Studio nyissa meg a NuGet-csomagkezelőt a Xamarin Android-alkalmazás létrehozása oktatóanyagban befejezett projektben. Keresse meg és telepítse a Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-csomagot.
  2. Nyissa meg a ToDoActivity.cs fájlt, és ne használja a definíciót #define OFFLINE_SYNC_ENABLED .
  3. A Visual Studio nyomja le az F5 billentyűt az ügyfélalkalmazás újraépítéséhez és futtatásához. Az alkalmazás ugyanúgy működik, mint az offline szinkronizálás engedélyezése előtt. A helyi adatbázis azonban most már adatokkal van feltöltve, amelyek offline forgatókönyvekben használhatók.

Az alkalmazás frissítése a háttérről való leválasztáshoz

Ebben a szakaszban megszakítja a Mobile App háttéralkalmazással való kapcsolatot offline helyzet szimulálása érdekében. Adatelemek hozzáadásakor a kivételkezelő jelzi, hogy az alkalmazás offline módban van. Ebben az állapotban a rendszer a helyi áruházban hozzáadott új elemeket szinkronizálja a mobilalkalmazás háttéralkalmazása számára, ha a leküldés csatlakoztatott állapotban van végrehajtva.

  1. Szerkessze a ToDoActivity.cs fájlját a megosztott projektben. Módosítsa úgy az applicationURL-t , hogy érvénytelen URL-címre mutasson:

      const string applicationURL = @"https://your-service.azurewebsites.fail";
    

    Az offline működést úgy is szemléltetheti, ha letiltja a Wi-Fi- és mobilhálózatokat az eszközön, vagy repülőgépes üzemmódot használ.

  2. Az alkalmazás felépítéséhez és futtatásához nyomja le az F5 billentyűt. Figyelje meg, hogy a szinkronizálás sikertelen volt a frissítéskor az alkalmazás indításakor.

  3. Adjon meg új elemeket, és figyelje meg, hogy a leküldés [CancelledByNetworkError] állapottal meghiúsul minden alkalommal, amikor a Mentés gombra kattint. Az új todo elemek azonban a helyi áruházban léteznek, amíg le nem lehet őketküldeni a mobilalkalmazás háttéralkalmazásának. Éles alkalmazásokban, ha letiltja ezeket a kivételeket, az ügyfélalkalmazás úgy viselkedik, mintha továbbra is csatlakozik a mobilalkalmazás háttéralkalmazáshoz.

  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 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. Ellenőrizze, hogy a háttéradatbázis adatai nem módosultak-e.

  6. (Nem kötelező) Egy REST-eszköz, például a Fiddler vagy a Postman használatával lekérdezheti a mobil háttérkészletet egy GET lekérdezéssel a következő formában: https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Az alkalmazás frissítése a Mobile App-háttéralkalmazás újracsatlakozáshoz

Ebben a szakaszban csatlakoztassa újra az alkalmazást a mobilalkalmazás háttéralkalmazáshoz. Az alkalmazás első futtatásakor az eseménykezelő OnCreate a következőt hívja meg: OnRefreshItemsSelected. Ez a metódus a SyncAsync hívásával szinkronizálja a helyi tárolót a háttéradatbázissal.

  1. Nyissa meg a ToDoActivity.cs fájlját a megosztott projektben, és visszaállítsa az applicationURL tulajdonság változását .

  2. Nyomja le az F5 billentyűt az alkalmazás újraépítéséhez és futtatásához. Az alkalmazás leküldéses és leküldéses műveletekkel szinkronizálja a helyi módosításokat az Azure Mobile App OnRefreshItemsSelected háttéralkalmazásával a metódus végrehajtásakor.

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

  4. Az alkalmazásban kattintson néhány elem melletti jelölőnégyzetre, hogy a helyi áruházban befejezi azokat.

    CheckItem A SyncAsync minden befejezett elemet szinkronizál a Mobile App háttéralkalmazásával. SyncAsync A leküldéses és leküldéses hívásokat is. Amikor olyan táblán hajt végre leküldést, amelynél az ügyfél módosításokat hajtott végre, a rendszer mindig automatikusan végrehajt egy leküldést. Ez biztosítja, hogy a helyi tárolóban lévő összes tábla és a kapcsolatok konzisztensek maradjanak. Ez a viselkedés váratlan leküldést eredményezhet. További információ erről a viselkedésről: Offline adatszinkronizálás az Azure Mobile Apps.

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

A Xamarin Android-alkalmazás létrehozása oktatóanyag befejezésekor letöltött Xamarin-ügyfélprojekt már tartalmaz olyan kódot, amely támogatja az offline szinkronizálást egy helyi SQLite-adatbázis használatával. Itt röviden áttekintheti, hogy mit tartalmaz az oktatóanyag kódja. 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ázisának inicializálása a végrehajtásakor ToDoActivity.OnCreate() történik ToDoActivity.InitLocalStoreAsync(). Ez a metódus létrehoz egy helyi SQLite-adatbázist MobileServiceSQLiteStore az Azure Mobile Apps SDK által biztosított 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, ToDoItem ebben az esetben. A típusnak nem kell tartalmaznia a távoli adatbázisban lévő összes oszlopot. Az oszlopoknak csak egy részkészlete tárolható.

      // ToDoActivity.cs
      private async Task InitLocalStoreAsync()
      {
          // new code to initialize the SQLite store
          string path = Path.Combine(System.Environment
              .GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename);
    
          if (!File.Exists(path))
          {
              File.Create(path).Dispose();
          }
    
          var store = new MobileServiceSQLiteStore(path);
          store.DefineTable<ToDoItem>();
    
          // Uses the default conflict handler, which fails on conflict
          // To use a different conflict handler, pass a parameter to InitializeAsync.
          // For more details, see https://go.microsoft.com/fwlink/?LinkId=521416.
          await client.SyncContext.InitializeAsync(store);
      }
    
  • A toDoTable tagja típusú, és nem IMobileServiceSyncTableIMobileServiceTable.ToDoActivity Az IMobileServiceSyncTable minden létrehozási, olvasási, frissítési és törlési (CRUD) táblaműveletet a helyi tároló adatbázisába irányít.

    A hívással döntheti el, hogy mikor lesz leküldve a módosítások az Azure Mobile App háttéralkalmazásának IMobileServiceSyncContext.PushAsync(). A szinkronizálási környezet segít megőrizni a táblakapcsolatokat azáltal, hogy nyomon követi és lekedi az PushAsync ügyfélalkalmazás által a hívott táblák változásait.

    A megadott kód a ToDoActivity.SyncAsync() todoitem lista frissítésekkor, illetve a todoitem hozzáadásakor vagy befejezésekor hívja meg a szinkronizálást. A kód minden helyi módosítás után szinkronizál.

    A megadott kódban TodoItem a rendszer a távoli tábla összes rekordját lekérdezi, de szűrheti is a rekordokat egy lekérdezésazonosító és a lekérdezésnek való átadással PushAsync. További információ: Növekményes szinkronizálás offline módban adatszinkronizálás Azure Mobile Apps.

      // ToDoActivity.cs
      private async Task SyncAsync()
      {
          try {
              await client.SyncContext.PushAsync();
              await toDoTable.PullAsync("allTodoItems", toDoTable.CreateQuery()); // query ID is used for incremental sync
          } catch (Java.Net.MalformedURLException) {
              CreateAndShowDialog (new Exception ("There was an error creating the Mobile Service. Verify the URL"), "Error");
          } catch (Exception e) {
              CreateAndShowDialog (e, "Error");
          }
      }
    

További források