Povolení offline synchronizace pro mobilní aplikace Xamarin. Forms
Přehled
Tento kurz zavádí funkci offline synchronizace pro Azure Mobile Apps pro Xamarin. Forms. 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.
Tento kurz je založený na řešení rychlý Start pro Xamarin. Forms pro Mobile Apps, které vytvoříte po dokončení kurzu [vytvoření aplikace Xamarin iOS]. Řešení rychlé zprovoznění pro Xamarin. Forms obsahuje kód pro podporu offline synchronizace, který stačí povolit. V tomto kurzu aktualizujete řešení rychlého startu, abyste mohli zapnout offline funkce Azure Mobile Apps. V aplikaci také zvýrazníte kód specifický pro práci v režimu offline. Pokud nepoužíváte stažené řešení pro rychlé zprovoznění, 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.
Povolení funkce offline synchronizace v řešení pro rychlé zprovoznění
Kód offline synchronizace je součástí projektu pomocí direktiv preprocesoru jazyka C#. Pokud je definován symbol OFFLINE_SYNC_ENABLED , jsou tyto cesty kódu zahrnuty do sestavení. pro Windows aplikace musíte také nainstalovat platformu SQLite.
v Visual Studio klikněte pravým tlačítkem na řešení >spravovat NuGet balíčky pro řešení..., vyhledejte a nainstalujte balíček Microsoft. Azure. Mobile. Client. SQLiteStore NuGet pro všechny projekty v řešení.
v Průzkumník řešení otevřete soubor TodoItemManager. cs z projektu s možností přenosné v názvu, který je přenosná knihovna tříd projektu, a pak zrušte komentář následující direktivy preprocesoru:
#define OFFLINE_SYNC_ENABLED
Volitelné pokud chcete podporovat Windows zařízení, nainstalujte jeden z následujících balíčků za běhu programu SQLite:
Windows 8.1 Runtime: nainstalujte SQLite pro Windows 8.1.
Windows Phone 8,1: nainstalujte SQLite pro Windows Phone 8,1.
Univerzální platforma Windows instalovat SQLite pro univerzální Windows universal.
i když rychlý start neobsahuje univerzální Windows projekt, je univerzální Windows platforma podporovaná ve formulářích Xamarin.
Volitelné v každém projektu Windows aplikace klikněte pravým tlačítkem na odkazy>přidat odkaz..., rozbalte rozšířeníWindows složky > . povolte příslušné SQLite pro sadu Windows sdk spolu s modulem Runtime Visual C++ 2013 pro sadu Windows SDK. názvy sady SDK SQLite se mírně liší u každé Windowsé platformy.
Kontrola kódu synchronizace klienta
Tady je stručný přehled toho, co je již součástí kódu kurzu v rámci #if OFFLINE_SYNC_ENABLED
direktiv. Funkce offline synchronizace je v souboru projektu TodoItemManager. cs v projektu přenositelné knihovny tříd. 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 v konstruktoru třídy TodoItemManager pomocí následujícího kódu:
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>();
Tento kód vytvoří novou místní databázi SQLite pomocí třídy MobileServiceSQLiteStore .
Metoda define vytvoří tabulku v místním úložišti, která odpovídá polím v poskytnutém typu. Typ nemusí zahrnovat všechny sloupce, které jsou ve vzdálené databázi. Je možné uložit podmnožinu sloupců.
Pole TODO v TodoItemManager je typ IMobileServiceSyncTable namísto IMobileServiceTable. Tato třída používá místní databázi pro všechny operace vytvoření, čtení, aktualizace a odstranění (CRUD) tabulky. Určíte, kdy se tyto změny vloží do back-endu mobilní aplikace, voláním PushAsync na IMobileServiceSyncContext. Kontext synchronizace pomáhá zachovat vztahy mezi tabulkami sledováním a vkládáním změn ve všech tabulkách. klientská aplikace byla při volání PushAsync změněna.
Pro synchronizaci s back-endu mobilní aplikace se volá následující metoda SyncAsync :
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"]); } } }
Tato ukázka používá jednoduché zpracování chyb s výchozí obslužnou rutinou synchronizace. Skutečná aplikace by zpracovávala různé chyby, jako jsou třeba síťové podmínky a konflikty serveru, pomocí vlastní implementace IMobileServiceSyncHandler .
Pokyny k offline synchronizaci
V ukázce je metoda SyncAsync volána pouze při spuštění a při žádosti o synchronizaci. Pokud chcete zahájit synchronizaci v aplikaci pro Android nebo iOS, přejděte na seznam položek. pro Windows použijte tlačítko synchronizovat . V reálné aplikaci můžete také při změně stavu sítě vytvořit aktivační událost synchronizace.
Při spuštění operace vyžádání na tabulce, která má nedokončené místní aktualizace sledované kontextem, tato operace vyžádané replikace automaticky aktivuje předchozí nabízený kontext. Při aktualizaci, přidávání a dokončování položek v této ukázce můžete vynechat explicitní volání PushAsync .
V poskytnutém kódu se dotazují všechny záznamy ve vzdálené tabulce TodoItem, ale je také možné filtrovat záznamy předáním ID dotazu a dotazu do PushAsync. další informace najdete v části přírůstková synchronizace v Offline Synchronizace dat ve službě Azure Mobile Apps.
Spuštění klientské aplikace
Když je offline synchronizace zapnutá, spusťte na každé platformě aspoň jednou klientskou aplikaci, aby se naplnila místní databáze úložiště. Později Simulujte scénář offline a upravíte data v místním úložišti, zatímco je aplikace offline.
Aktualizace chování synchronizace klientské aplikace
V této části upravíte projekt klienta pro simulaci offline scénáře pomocí neplatné adresy URL aplikace pro váš back-end. Případně můžete vypnout síťová připojení přesunutím zařízení do režimu v letadle. Když přidáte nebo změníte datové položky, tyto změny se uchovávají v místním úložišti, ale nesynchronizují se do úložiště dat back-endu, dokud se připojení znovu nevytvoří.
v Průzkumník řešení otevřete soubor projektu konstanty. cs z přenosného projektu a změňte hodnotu
ApplicationURL
tak, aby odkazovala na neplatnou adresu URL:public static string ApplicationURL = @"https://your-service.azurewebsites.net/";
Otevřete soubor TodoItemManager. cs z přenosného projektu a pak přidejte catch pro základní třídu výjimky do Try... blok catch v SyncAsync. Tento blok catch zapíše zprávu výjimky do konzoly, a to následujícím způsobem:
catch (Exception ex) { Console.Error.WriteLine(@"Exception: {0}", ex.Message); }
Sestavte a spusťte klientskou aplikaci. Přidejte nějaké nové položky. Všimněte si, že v konzole je zaznamenána výjimka pro každý pokus o synchronizaci s back-end. Tyto nové položky existují jenom v místním úložišti, dokud je nebudete moct vložit do mobilního back-endu. Klientská aplikace se chová, jako by byla připojena k back-endu, a podporuje všechny operace vytvoření, čtení, aktualizace a odstranění (CRUD).
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é pomocí Visual Studio můžete zobrazit tabulku Azure SQL Database, abyste viděli, že se data v back-end databázi nezměnila.
v 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.
Aktualizace klientské aplikace pro opětovné připojení k vašemu mobilnímu back-endu
V této části znovu připojíte aplikaci k mobilnímu back-endu, která simuluje aplikaci, která se vrátí zpátky do online stavu. Při provádění gesta aktualizace se data synchronizují do mobilního back-endu.
Znovu otevřete konstanty. cs. Opravte rozhraní
applicationURL
tak, aby odkazovalo na správnou adresu URL.Znovu sestavte a spusťte klientskou aplikaci. Aplikace se po spuštění pokusí o synchronizaci s back-endu mobilní aplikace. Ověřte, že v konzole ladění nejsou protokolovány žádné výjimky.
Volitelné pomocí SQL Server Průzkumník objektů nebo nástroje REST, jako je Fiddler nebo post, si můžete zobrazit aktualizovaná data. Všimněte si, že data byla synchronizovaná mezi databází back-end a místním úložištěm.
Všimněte si, že data byla synchronizovaná mezi databází a místním úložištěm a obsahuje položky, které jste přidali v době, kdy byla aplikace odpojena.