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


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

Áttekintés

Ez az oktatóanyag bemutatja az Azure Mobile Apps for Xamarin.iOS offline szinkronizálási funkcióját. Az offline szinkronizálás lehetővé teszi a végfelhasználók számára, hogy akkor is kommunikálnak a mobilalkalmazásokkal , amikor nincs hálózati kapcsolat, és adatokat megtekintenek, hozzáadnak vagy módosítanának. 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ítjük a Xamarin.iOS-alkalmazásprojektet a Xamarin iOS-alkalmazás létrehozása részbő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 is használnia kell, inicializáljon egy SyncContext szöveget egy helyi áruházba. Hivatkozhat a táblára az [IMobileServiceSyncTable] felületen keresztül. Az SQLite az eszköz helyi tárolója.

  1. Nyissa meg a NuGet-csomagkezelőt a Xamarin iOS-alkalmazás létrehozása oktatóanyagban befejezett projektben, majd keresse meg és telepítse a Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-csomagot.
  2. Nyissa meg a QSTodoService.cs fájlt, és ne ad vissza a definíciót #define OFFLINE_SYNC_ENABLED .
  3. Építse újra és futtassa az ügyfélalkalmazást. 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ás kapcsolatát 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 helyi áruházban hozzáadott új elemek szinkronizálva lesznek a mobilalkalmazás háttéralkalmazása számára, amikor a leküldés következő futtatása csatlakoztatott állapotban történik.

  1. Szerkessze a QSToDoService.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. Hozza létre és futtassa az alkalmazást. 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, 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ő) Ha már telepített 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. Ez azt szimulálja, hogy az alkalmazás offline állapotról online állapotba vált a mobilalkalmazás háttéralkalmazásával. Ha a hálózati kapcsolat kikapcsolásával szimulálta a hálózati kimaradást, nincs szükség kódváltozásra. Kapcsolja be újra a hálózatot. Az alkalmazás első futtatásakor a rendszer a metódust RefreshDataAsync hívja meg. Ez a hívásával SyncAsync szinkronizálja a helyi tárolót a háttéradatbázissal.

  1. Nyissa meg a QSToDoService.cs fájlját a megosztott projektben, és módosítsa az applicationURL tulajdonságot .

  2. Építse újra és futtassa az alkalmazást. 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 a néhány elem melletti jelölőnégyzetre a helyi áruházban való befejezéséhez.

    CompleteItemAsync 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, amelyen az ügyfél módosításokat hajtott végre, a rendszer mindig automatikusan végrehajtja az ügyfélszinkronizálási környezetre való leküldést. Az implicit leküldés biztosítja, hogy a helyi tárolóban lévő összes tábla és a kapcsolatok konzisztensek maradjanak. További információ erről a viselkedésről: Offline adatszinkronizálás azure Mobile Apps.

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

A Xamarin iOS-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 rendszer a végrehajtásakor inicializálja a helyi tároló QSTodoListViewController.ViewDidLoad() adatbázisát QSTodoService.InitializeStoreAsync(). Ez a metódus létrehoz egy új helyi SQLite-adatbázist MobileServiceSQLiteStore az Azure Mobile App ügyféloldali 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ó.

      // QSTodoService.cs
    
      public async Task InitializeStoreAsync()
      {
          var store = new MobileServiceSQLiteStore(localDbPath);
          store.DefineTable<ToDoItem>();
    
          // Uses the default conflict handler, which fails on conflict
          await client.SyncContext.InitializeAsync(store);
      }
    
  • A todoTable tagja QSTodoService típusú, és IMobileServiceSyncTable nem IMobileServiceTable. 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ákban módosított módosításokat.

    A megadott kód a QSTodoService.SyncAsync() todoitem lista frissítésekkor vagy egy todoitem hozzáadásakor vagy befejezésekor hívja meg a szinkronizálást. Az alkalmazás minden helyi módosítás után szinkronizál. Ha olyan táblán hajt végre leküldést, amely a környezet által nyomon követi a függőben lévő helyi frissítéseket, a leküldéses művelet először automatikusan elindítja a környezet leküldését.

    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 egy lekérdezés a következőnek való átadása alapján: PushAsync. További információ: Növekményes szinkronizálás az Offline adatszinkronizálás az Azure Mobile Apps.

      // QSTodoService.cs
      public async Task SyncAsync()
      {
          try
          {
              await client.SyncContext.PushAsync();
              await todoTable.PullAsync("allTodoItems", todoTable.CreateQuery()); // query ID is used for incremental sync
          }
    
          catch (MobileServiceInvalidOperationException e)
          {
              Console.Error.WriteLine(@"Sync Failed: {0}", e.Message);
          }
      }
    

További források