Povolení offline synchronizace pro mobilní aplikace Xamarin. iOS
Přehled
Tento kurz zavádí funkci offline synchronizace pro Azure Mobile Apps pro Xamarin. iOS. Offline synchronizace umožňuje koncovým uživatelům pracovat s mobilní aplikací – zobrazení, přidávání nebo upravování dat – i když není dostupné žádné síťové připojení. Změny jsou uloženy v místní databázi. Jakmile je zařízení zase online, tyto změny se synchronizují se vzdálenou službou.
V tomto kurzu aktualizujte projekt aplikace Xamarin. iOS z části Vytvoření aplikace Xamarin pro iOS tak, aby podporovala offline funkce Azure Mobile Apps. Pokud nepoužíváte stažený projekt serveru pro rychlé zahájení, musíte do svého projektu přidat balíčky rozšíření pro přístup k datům. Další informace o balíčcích rozšíření serveru najdete v tématu práce s back-end serverem .NET SDK pro Azure Mobile Apps.
další informace o funkci offline synchronizace najdete v tématu offline Synchronizace dat v Azure Mobile Apps.
Aktualizace klientské aplikace tak, aby podporovala offline funkce
Funkce offline mobilní aplikace v Azure umožňují interakci s místní databází, když jste v offline scénáři. Pokud chcete tyto funkce použít ve své aplikaci, inicializujte SyncContext do místního úložiště. Odkaz na tabulku prostřednictvím rozhraní [IMobileServiceSyncTable]. SQLite se používá jako místní úložiště na zařízení.
- otevřete správce balíčků NuGet v projektu, který jste dokončili v kurzu vytvoření aplikace Xamarin iOS , a pak vyhledejte a nainstalujte balíček Microsoft. Azure. Mobile. Client. SQLiteStore NuGet.
- Otevřete soubor QSTodoService. cs a odkomentujte
#define OFFLINE_SYNC_ENABLED
definici. - Znovu sestavte a spusťte klientskou aplikaci. Aplikace funguje stejně jako předtím, než jste povolili offline synchronizaci. Místní databáze je ale teď naplněná daty, která se dají použít v offline scénáři.
Aktualizujte aplikaci, aby se odpojila od back-endu.
V této části přerušíte připojení k back-endu mobilní aplikace, aby se simulovala situace v režimu offline. Při přidávání datových položek vám obslužná rutina výjimky upozorní, že aplikace je v offline režimu. V tomto stavu se nové položky přidávají do místního úložiště a v případě příštího spuštění v připojeném stavu se budou synchronizovat s back-endu mobilní aplikace.
Upravte QSToDoService. cs ve sdíleném projektu. Změňte ApplicationUrl nebyla tak, aby ukazoval na neplatnou adresu URL:
const string applicationURL = @"https://your-service.azurewebsites.fail";
V případě, že zakážete Wi-Fi a mobilní sítě v zařízení nebo použijete režim v letadlech, můžete také předvést offline chování.
Sestavte a spusťte aplikaci. Všimněte si, že při aktualizaci se synchronizace po spuštění aplikace nezdařila.
Zadejte nové položky a Všimněte si, že při každém kliknutí na Uložitse nabízená oznámení nezdařila se stavem [CancelledByNetworkError]. Nové položky ToDo ale existují v místním úložišti, dokud je nebudete moct vložit do back-endu mobilní aplikace. Pokud potlačíte tyto výjimky v produkční aplikaci, chová se klientská aplikace, jako by byla stále připojená k back-endu mobilní aplikace.
Zavřete aplikaci a restartujte ji, abyste ověřili, že nové položky, které jste vytvořili, jsou trvale uložené v místním úložišti.
Volitelné pokud máte na počítači nainstalovanou Visual Studio, otevřete Průzkumník serveru. přejděte do databáze v Azure- >SQL databázích. klikněte pravým tlačítkem na databázi a vyberte otevřít ve SQL Server Průzkumník objektů. nyní můžete přejít na SQL databázovou tabulku a její obsah. Ověřte, že se data v back-end databázi nezměnila.
Volitelné Použijte nástroj REST, jako je Fiddler nebo post, k dotazování mobilního back-endu pomocí dotazu GET ve formuláři
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem
.
Aktualizujte aplikaci tak, aby se znovu připojila k back-endu mobilní aplikace.
V této části znovu připojte aplikaci k back-endu mobilní aplikace. Tím se aplikace přesouvá z offline režimu do online stavu pomocí back-endu mobilní aplikace. Pokud jste simulovali zlomek sítě vypnutím možnosti připojení k síti, nejsou potřeba žádné změny kódu.
Znovu zapněte síť. Při prvním spuštění aplikace RefreshDataAsync
je volána metoda. To zase volá SyncAsync
synchronizaci místního úložiště s back-end databází.
Otevřete ve sdíleném projektu QSToDoService. cs a vraťte změnu vlastnosti ApplicationUrl nebyla .
Znovu sestavte a spusťte aplikaci. Aplikace synchronizuje místní změny s back-endu mobilní aplikace Azure pomocí operací push a pull, když se
OnRefreshItemsSelected
Metoda spustí.Volitelné pomocí SQL Server Průzkumník objektů nebo nástroje REST, jako je Fiddler, zobrazte aktualizovaná data. Všimněte si, že data byla synchronizovaná mezi databází back-end mobilní aplikace Azure a místním úložištěm.
V aplikaci klikněte na zaškrtávací políčko vedle několika položek, abyste je mohli doplňovat v místním úložišti.
CompleteItemAsync
voláSyncAsync
synchronizaci každé dokončené položky s back-endu mobilní aplikace.SyncAsync
volá metodu push a Pull. Pokaždé, když provedete stažení z tabulky, na kterou klient provedl změny, se v kontextu synchronizace klienta vždy provádí první automatické spuštění. Implicitní nabízená oznámení zajistí, že všechny tabulky v místním úložišti spolu s relacemi zůstanou konzistentní. další informace o tomto chování najdete v tématu Offline Synchronizace dat ve službě Azure Mobile Apps.
Kontrola kódu synchronizace klienta
Projekt klienta Xamarin, který jste si stáhli po dokončení kurzu Vytvoření aplikace Xamarin iOS , už obsahuje kód podporující offline synchronizaci s použitím místní databáze sqlite. Tady je stručný přehled toho, co je již zahrnuto v kódu kurzu. koncepční přehled této funkce najdete v tématu Offline Synchronizace dat ve službě Azure Mobile Apps.
Před provedením jakékoli operace tabulky je nutné inicializovat místní úložiště. Místní databáze úložiště je inicializována při
QSTodoListViewController.ViewDidLoad()
QSTodoService.InitializeStoreAsync()
spuštění. Tato metoda vytvoří novou místní databázi SQLite pomocíMobileServiceSQLiteStore
třídy poskytované klientskou sadou SDK pro mobilní aplikace Azure.DefineTable
Metoda vytvoří tabulku v místním úložišti, která odpovídá polím v poskytnutém typu,ToDoItem
v tomto případě. Typ nemusí zahrnovat všechny sloupce, které jsou ve vzdálené databázi. Je možné uložit pouze podmnožinu sloupců.// 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); }
todoTable
ČlenQSTodoService
jeIMobileServiceSyncTable
typu namístoIMobileServiceTable
. IMobileServiceSyncTable přesměruje všechny operace vytvoření, čtení, aktualizace a odstranění (CRUD) do místní databáze úložiště.Určíte, kdy se tyto změny vloží do back-endu mobilní aplikace Azure voláním
IMobileServiceSyncContext.PushAsync()
. Kontext synchronizace pomáhá zachovat vztahy mezi tabulkami, a to sledováním a vkládáním změn ve všech tabulkách, které klientská aplikace přiPushAsync
volání změnila.Poskytnutý kód volá
QSTodoService.SyncAsync()
synchronizaci pokaždé, když se seznam TodoItem aktualizuje nebo se přidá nebo dokončí TodoItem. Aplikace se po každé místní změně synchronizuje. Pokud je akce vyžádání obsahu provedena na tabulku, která obsahuje nedokončené místní aktualizace, které jsou sledovány v kontextu, bude tato operace vyžádaného volání automaticky aktivovat kontextovou nabízenou vložení.V poskytnutém kódu se dotazují všechny záznamy ve vzdálené
TodoItem
tabulce, ale je také možné filtrovat záznamy předáním ID dotazu a dotazu doPushAsync
. další informace najdete v části přírůstková synchronizace v Offline Synchronizace dat ve službě 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); } }