Hinzufügen der Offlinedatensynchronisierung zu Ihrer Xamarin.Forms-App
In diesem Tutorial wird die Offlinesynchronisierungsfunktion von Azure Mobile Apps für Xamarin.Forms behandelt. Die Offlinesynchronisierung ermöglicht Endbenutzern die Interaktion mit einer mobilen App – Anzeigen, Hinzufügen oder Ändern von Daten – auch wenn keine Netzwerkverbindung vorhanden ist. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remote-Back-End synchronisiert.
Bevor Sie mit diesem Tutorial beginnen, sollten Sie das Schnellstarttutorial für Xamarin.Forms durchführen, in dem Sie u. a. einen geeigneten Back-End-Dienst erstellen.
Weitere Informationen zur Offlinesynchronisierungsfunktion finden Sie im Thema Offlinedatensynchronisierung in Azure Mobile Apps.
Aktualisieren der App für die Unterstützung von Offlinesynchronisierung
Beim Onlinevorgang lesen Sie Daten aus einer IRemoteTable<T>
und schreiben Daten in diese Tabelle. Bei der Offlinesynchronisierung verwenden Sie stattdessen eine IOfflineTable<T>
zum Lesen und Schreiben von Daten. Die IOfflineTable
wird durch eine SQLite-Datenbank auf einem Gerät unterstützt und mit der Back-End-Datenbank synchronisiert.
In Visual Studio:
Klicken Sie mit der rechten Maustaste auf die
TodoApp
Lösung, und wählen Sie dann "NuGet-Pakete für Lösung verwalten" aus.Wählen Sie auf der neuen Registerkarte " Durchsuchen" aus, und geben Sie dann "Microsoft.Datasync.Client " in das Suchfeld ein.
Wählen Sie das
Microsoft.Datasync.Client.SQLiteStore
-Paket aus.Wählen Sie im rechten Bereich alle Clientprojekte (mit Ausnahme des
TodoAppService.NET6
Projekts) aus.Wählen Sie Installieren aus.
Akzeptieren Sie den Lizenzvertrag, wenn Sie dazu aufgefordert werden.
Aktualisieren des Remotedienstclients
Öffnen Sie das TodoApp.Data
Projekt, und suchen Sie die RemoteTodoService.cs
Klasse (im Services
Verzeichnis). Aktualisieren Sie die Klasse wie folgt:
Fügen Sie die folgende
using
-Anweisung am Anfang der Datei hinzu:using Microsoft.Datasync.Client.SQLiteStore;
Ändern sie die Definition von
_table
:IOfflineTable<TodoItem>
/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Fügen Sie eine neue Eigenschaft zum Speichern des Offlinedatenbankspeicherorts hinzu:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Aktualisieren Sie die
InitializeAsync
Methode, um die Offlinedatenbank zu definieren:// Create the offline store definition var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString(); var store = new OfflineSQLiteStore(connectionString); store.DefineTable<TodoItem>(); var options = new DatasyncClientOptions { OfflineStore = store, HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() } }; // Create the datasync client. _client = TokenRequestor == null ? new DatasyncClient(Constants.ServiceUri, options) : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options); // Initialize the database await _client.InitializeOfflineStoreAsync(); // Get a reference to the offline table. _table = _client.GetOfflineTable<TodoItem>(); // Set _initialized to true to prevent duplication of locking. _initialized = true;
Aktualisieren Sie die
RefreshItemsAsync()
Offlinesynchronisierung:/// <summary> /// Refreshes the TodoItems list manually. /// </summary> /// <returns>A task that completes when the refresh is done.</returns> public async Task RefreshItemsAsync() { await InitializeAsync(); // First, push all the items in the table. await _table.PushItemsAsync(); // Then, pull all the items in the table. await _table.PullItemsAsync(); return; }
Festlegen des Offlinedatenbankspeicherorts
Bearbeiten Sie die App.xaml.cs
Datei im TodoApp.Forms
Projekt. Ändern Sie die Definition wie RemoteTodoService
folgt:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Wenn Sie das Authentifizierungslernprogramm noch nicht abgeschlossen haben, sollte die Definition stattdessen wie folgt aussehen:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Testen der App
Die App wird erst mit dem Back-End synchronisiert, wenn das Aktualisierungssymbol gedrückt wird. Für Test:
Öffnen Sie das Azure-Portal.
Öffnen Sie die Ressourcengruppe, die die Ressourcen für die Schnellstartanleitung enthält.
Wählen Sie die
quickstart
Datenbank aus.Wählen Sie den Abfrage-Editor (Vorschau) aus.
Melden Sie sich mit der SQL Server-Authentifizierung mit denselben Anmeldeinformationen an, die Sie für die Datenbank eingerichtet haben.
- Bei Bedarf werden Sie aufgefordert, den Zugriff auf Ihre IP-Adresse zuzulassen. Wählen Sie den Link aus, um die Zulassungsliste zu aktualisieren, und drücken Sie dann OK , um die Anmeldung erneut zu versuchen.
Geben Sie
SELECT * FROM [dbo].[TodoItems]
in den Abfrage-Editor ein. Wählen Sie dann Ausführen aus.
Eine Liste der aktuellen TodoItems wird angezeigt.
Nehmen Sie nun einige Änderungen über Ihre App vor. DRÜCKEN SIE NICHT DIE AKTUALISIERUNG (noch).
Wiederholen Sie die SQL-Anweisung in der Azure-Portal, und stellen Sie sicher, dass an den Daten in der Datenbank keine Änderungen vorgenommen wurden.
Wählen Sie das Symbol "Aktualisieren" in Ihrer App aus, um die Daten in der Warteschlange an den Back-End-Dienst zu übertragen. Im Ausgabedebugfenster werden die HTTP-Transaktionen angezeigt.
Wiederholen Sie die SQL-Anweisung in der Azure-Portal, und stellen Sie sicher, dass Ihre Änderungen an den Remotedienst übertragen wurden.
Bereinigen von Ressourcen
Wenn Sie kein weiteres Schnellstart-Lernprogramm ausführen, können Sie die ressourcen löschen, die dem Back-End-Dienst zugeordnet sind.
- Öffnen Sie das Azure-Portal.
- Wählen Sie die Ressourcengruppe aus, die die Schnellstartressourcen enthält.
- Wählen Sie die Option Ressourcengruppe löschen.
- Folgen Sie den Anweisungen, um den Löschvorgang zu bestätigen.
Sie können auch die Azure CLI verwenden:
az group delete -g quickstart
Wenn Sie die Azure Developer CLI zum Bereitstellen von Ressourcen verwendet haben, können Sie stattdessen den azd down
Befehl verwenden.
Der Löschvorgang dauert einige Minuten.
Nächste Schritte
- Lesen Sie die DOKUMENTATION ZUR VORGEHENSWEISE:
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für