Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Overzicht
In deze zelfstudie maakt u kennis met de offlinesynchronisatiefunctie van Azure Mobile Apps voor Xamarin.iOS. Met offlinesynchronisatie kunnen eindgebruikers communiceren met een mobiele app die gegevens bekijkt, toevoegt of wijzigt, zelfs als er geen netwerkverbinding is. Wijzigingen worden opgeslagen in een lokale database. Zodra het apparaat weer online is, worden deze wijzigingen gesynchroniseerd met de externe service.
In deze zelfstudie werkt u het Xamarin.iOS-app-project bij vanuit Een Xamarin iOS-app maken ter ondersteuning van de offlinefuncties van Azure Mobile Apps. Als u het gedownloade snelstartserverproject niet gebruikt, moet u de uitbreidingspakketten voor gegevenstoegang toevoegen aan uw project. Zie Werken met de SDK van de .NET-back-endserver voor Azure Mobile Appsvoor meer informatie over serveruitbreidingspakketten.
Zie het onderwerp Offline Data Sync in Azure Mobile Appsvoor meer informatie over de functie voor offlinesynchronisatie.
De client-app bijwerken om offlinefuncties te ondersteunen
Met offlinefuncties van Azure Mobile App kunt u communiceren met een lokale database wanneer u zich in een offlinescenario bevindt. Als u deze functies in uw app wilt gebruiken, initialiseert u een SyncContext- naar een lokale store. Verwijs naar uw tabel via de interface [IMobileServiceSyncTable]. SQLite wordt gebruikt als het lokale archief op het apparaat.
- Open de NuGet-pakketbeheerder in het project dat u hebt voltooid in de Een Xamarin iOS-app maken tutorial. Zoek vervolgens naar en installeer het Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-pakket.
- Open het QSTodoService.cs-bestand en verwijder opmerkingen bij de definitie van de
#define OFFLINE_SYNC_ENABLED
. - Bouw de client-app opnieuw en voer deze uit. De app werkt hetzelfde als voordat u offlinesynchronisatie hebt ingeschakeld. De lokale database wordt nu echter gevuld met gegevens die kunnen worden gebruikt in een offlinescenario.
De app bijwerken om de verbinding met de back-end te verbreken
In deze sectie onderbreekt u de verbinding met de back-end van uw mobiele app om een offlinesituatie te simuleren. Wanneer u gegevensitems toevoegt, geeft uw uitzonderingshandler aan dat de app zich in de offlinemodus bevindt. In deze toestand worden nieuwe items die in de lokale store zijn toegevoegd, gesynchroniseerd met de back-end van de mobiele app wanneer push in een verbonden toestand plaatsvindt.
Bewerk QSToDoService.cs in het gedeelde project. Wijzig de applicationURL- zodat deze verwijst naar een ongeldige URL:
const string applicationURL = @"https://your-service.azurewebsites.fail";
U kunt ook offlinegedrag demonstreren door wifi en mobiele netwerken op het apparaat uit te schakelen of de vliegtuigstand te gebruiken.
Bouw en voer de app uit. U ziet dat de synchronisatie is mislukt bij vernieuwen wanneer de app werd gestart.
Voer nieuwe items in en merk op dat push telkens mislukt met de status [CancelledByNetworkError] elke keer dat u op Opslaanklikt. De nieuwe takenitems bevinden zich echter in de lokale store totdat ze naar de back-end van de mobiele app kunnen worden gepusht. Als u in een productie-app deze uitzonderingen onderdrukt, gedraagt de client-app zich alsof deze nog steeds is verbonden met de back-end van de mobiele app.
Sluit de app en start deze opnieuw om te controleren of de nieuwe items die u hebt gemaakt, behouden blijven in de lokale store.
(Optioneel) Als u Visual Studio op een pc hebt geïnstalleerd, opent u Server Explorer-. Navigeer naar uw database in Azure->SQL Databases. Klik met de rechtermuisknop op de database en selecteer Openen in SQL Server Object Explorer. U kunt nu naar uw SQL-databasetabel en de inhoud ervan bladeren. Controleer of de gegevens in de back-enddatabase niet zijn gewijzigd.
(Optioneel) Gebruik een REST-hulpprogramma zoals Fiddler of Postman om een query uit te voeren op uw mobiele back-end met behulp van een GET-query in het formulier
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem
.
De app bijwerken om de back-end van uw mobiele app opnieuw te verbinden
In deze sectie verbindt u de app opnieuw met de back-end van de mobiele app. Hiermee wordt de app gesimuleerd van een offlinestatus naar een onlinestatus met de back-end van de mobiele app. Als u de netwerkonderbreking hebt gesimuleerd door de netwerkverbinding uit te schakelen, zijn er geen codewijzigingen nodig.
Schakel het netwerk opnieuw in. Wanneer u de toepassing voor het eerst uitvoert, wordt de methode RefreshDataAsync
aangeroepen. Dit roept op zijn beurt SyncAsync
aan om uw lokale opslag te synchroniseren met de back-end database.
Open QSToDoService.cs in het gedeelde project en herstel de wijziging van de eigenschap applicationURL.
Bouw de app opnieuw en voer deze uit. De app synchroniseert uw lokale wijzigingen met de back-end van azure Mobile App met behulp van push- en pull-bewerkingen wanneer de methode
OnRefreshItemsSelected
wordt uitgevoerd.(Optioneel) Bekijk de bijgewerkte gegevens met behulp van SQL Server Object Explorer of een REST-hulpprogramma zoals Fiddler. U ziet dat de gegevens zijn gesynchroniseerd tussen de back-enddatabase van Azure Mobile App en de lokale opslag.
Klik in de app op het selectievakje naast een paar items om deze in de lokale store te voltooien.
CompleteItemAsync
roeptSyncAsync
aan om elk voltooid item te synchroniseren met de back-end van de mobiele app.SyncAsync
roept zowel push als pull aan. Wanneer u een pull uitvoert op basis van een tabel waaraan de client wijzigingen heeft aangebracht, wordt er altijd automatisch een push uitgevoerd op de clientsynchronisatiecontext. De impliciete push zorgt ervoor dat alle tabellen in de lokale opslag samen met relaties consistent blijven. Zie Offline Data Sync in Azure Mobile Appsvoor meer informatie over dit gedrag.
De clientsynchronisatiecode controleren
Het Xamarin-clientproject dat u hebt gedownload toen u de zelfstudie hebt voltooid Een Xamarin iOS-app maken al code bevat die offlinesynchronisatie ondersteunt met behulp van een lokale SQLite-database. Hier volgt een kort overzicht van wat al is opgenomen in de zelfstudiecode. Zie Offline Data Sync in Azure Mobile Appsvoor een conceptueel overzicht van de functie.
Voordat tabelbewerkingen kunnen worden uitgevoerd, moet de lokale opslag worden geïnitialiseerd. De lokale winkeldatabase wordt geïnitialiseerd wanneer
QSTodoListViewController.ViewDidLoad()
QSTodoService.InitializeStoreAsync()
uitvoert. Met deze methode maakt u een nieuwe lokale SQLite-database met behulp van deMobileServiceSQLiteStore
-klasse die wordt geleverd door de CLIENT-SDK van Azure Mobile App.Met de methode
DefineTable
maakt u een tabel in de lokale opslag die overeenkomt met de velden van het opgegeven type,ToDoItem
in dit geval. Het type hoeft niet alle kolommen in de externe database op te nemen. Het is mogelijk om slechts een subset kolommen op te slaan.// 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); }
Het
todoTable
lid vanQSTodoService
is van hetIMobileServiceSyncTable
type in plaats vanIMobileServiceTable
. De IMobileServiceSyncTable stuurt alle bewerkingen voor het maken, lezen, bijwerken en verwijderen van tabellen (CRUD) naar de lokale archiefdatabase.U bepaalt wanneer deze wijzigingen naar de back-end van de mobiele Azure-app worden gepusht door
IMobileServiceSyncContext.PushAsync()
aan te roepen. De synchronisatiecontext helpt tabelrelaties te behouden door wijzigingen in alle tabellen bij te houden en te pushen die een client-app heeft gewijzigd wanneerPushAsync
wordt aangeroepen.De opgegeven code roept
QSTodoService.SyncAsync()
aan om te synchroniseren wanneer de takenlijst wordt vernieuwd of een todoitem wordt toegevoegd of voltooid. De app wordt gesynchroniseerd na elke lokale wijziging. Als een pull wordt uitgevoerd op basis van een tabel met in behandeling zijnde lokale updates die door de context worden bijgehouden, wordt door die pull-bewerking automatisch een contextpush geactiveerd.In de opgegeven code worden alle records in de externe
TodoItem
tabel opgevraagd, maar het is ook mogelijk om records te filteren door een query-id en query door te geven aanPushAsync
. Zie de sectie Incrementele synchronisatie in Offline Data Sync in Azure Mobile Appsvoor meer informatie.// 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); } }