Hinzufügen der Offlinedatensynchronisierung zu Ihrer Xamarin.iOS-App
Anmerkung
Dieses Produkt wird eingestellt. Eine Ersetzung für Projekte mit .NET 8 oder höher finden Sie in der Community Toolkit Datasync-Bibliothek.
Dieses Lernprogramm behandelt das Offlinesynchronisierungsfeature von Azure Mobile Apps für Xamarin.iOS. 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 dieses Lernprogramm starten, sollten Sie das Xamarin.iOS Schnellstart-Lernprogrammabgeschlossen haben, das das Erstellen eines geeigneten Back-End-Diensts umfasst.
Weitere Informationen zum Offlinesynchronisierungsfeature finden Sie im Thema Offlinedatensynchronisierung in Azure Mobile Apps.
Aktualisieren der App zur Unterstützung der Offlinesynchronisierung
Im Onlinevorgang lesen und schreiben Sie aus einem IRemoteTable<T>
. Bei Verwendung der Offlinesynchronisierung lesen und schreiben Sie stattdessen aus einem IOfflineTable<T>
. Die IOfflineTable
wird von einer 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....Wählen Sie auf der neuen Registerkarte Durchsuchenaus, 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 aus (mit Ausnahme des
TodoAppService.NET6
Projekts).Wählen Sie installierenaus.
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 verzeichnis Services
). 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
alsIOfflineTable<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()
, um die Offlinesynchronisierung durchzuführen:/// <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 im TodoApp.iOS
Projekt die ViewControllers\HomeViewController.cs
Datei. Ändern Sie die Definition der RemoteTodoService
im Konstruktor wie folgt:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Wenn Sie das Authentifizierungslernprogramm nichtabgeschlossen 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. So testen Sie:
Ö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 im Abfrage-Editor
SELECT * FROM [dbo].[TodoItems]
ein. Wählen Sie dann Ausführenaus.
Eine Liste der aktuellen TodoItems wird angezeigt.
Nehmen Sie nun einige Änderungen über Ihre App vor. NICHT AKTUALISIEREN (noch) drücken.
Wiederholen Sie die SQL-Anweisung im Azure-Portal, und stellen Sie sicher, dass an den Daten in der Datenbank keine Änderungen vorgenommen wurden.
Wählen Sie in Ihrer App das Symbol Aktualisieren 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 im 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 Ressourcengruppe löschenaus.
- 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 Befehl azd down
verwenden.
Der Löschvorgang dauert einige Minuten.
Nächste Schritte
- Lesen Sie die DOKUMENTATION ZUR VORGEHENSWEISE: