Freigeben über


Aktivieren der Offlinesynchronisierung für Ihre mobile Xamarin.Android-App

Überblick

In diesem Lernprogramm wird das Offlinesynchronisierungsfeature von Azure Mobile Apps für Xamarin.Android vorgestellt. Die Offlinesynchronisierung ermöglicht Es Endbenutzern, mit einer mobilen App zu interagieren – selbst wenn keine Netzwerkverbindung besteht. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remotedienst synchronisiert.

In diesem Lernprogramm aktualisieren Sie das Clientprojekt aus dem Lernprogramm "Erstellen einer Xamarin Android-App ", um die Offlinefeatures von Azure Mobile Apps zu unterstützen. Wenn Sie das heruntergeladene Schnellstartserverprojekt nicht verwenden, müssen Sie dem Projekt die Datenzugriffserweiterungspakete hinzufügen. Weitere Informationen zu Servererweiterungspaketen finden Sie unter Arbeiten mit dem .NET-Back-End-Server-SDK für Azure Mobile Apps.

Weitere Informationen zum Offlinesynchronisierungsfeature finden Sie im Thema Offlinedatensynchronisierung in Azure Mobile Apps.

Aktualisieren der Client-App zur Unterstützung von Offlinefeatures

Offlinefunktionen von Azure Mobile App ermöglichen ihnen die Interaktion mit einer lokalen Datenbank, wenn Sie sich in einem Offlineszenario befinden. Um diese Features in Ihrer App zu verwenden, initialisieren Sie den SyncContext- für einen lokalen Store. Verweisen Sie dann über die IMobileServiceSyncTable Schnittstelle auf die Tabelle. SQLite wird als lokaler Speicher auf dem Gerät verwendet.

  1. Öffnen Sie in Visual Studio den NuGet-Paket-Manager im Projekt, das Sie im Lernprogramm zum Erstellen einer Xamarin Android-App abgeschlossen haben. Suchen und installieren Sie das Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-Paket.
  2. Öffnen Sie die Datei ToDoActivity.cs und entfernen Sie die Kommentierung der #define OFFLINE_SYNC_ENABLED-Definition.
  3. Drücken Sie in Visual Studio die F5--Taste, um die Client-App neu zu erstellen und auszuführen. Die App funktioniert genauso wie zuvor, bevor Sie die Offlinesynchronisierung aktiviert haben. Die lokale Datenbank wird jedoch jetzt mit Daten aufgefüllt, die in einem Offlineszenario verwendet werden können.

Aktualisieren der App, um die Verbindung mit dem Back-End zu trennen

In diesem Abschnitt unterbrechen Sie die Verbindung mit Ihrem Mobilen App-Back-End, um eine Offlinesituation zu simulieren. Wenn Sie Datenelemente hinzufügen, teilt Der Ausnahmehandler Ihnen mit, dass sich die App im Offlinemodus befindet. In diesem Zustand werden neue Elemente im lokalen Store hinzugefügt und mit dem mobilen App-Back-End synchronisiert, wenn ein Push in einem verbundenen Zustand ausgeführt wird.

  1. Bearbeiten Sie ToDoActivity.cs im freigegebenen Projekt. Ändern Sie die applicationURL so, dass sie auf eine ungültige URL verweist:

      const string applicationURL = @"https://your-service.azurewebsites.fail";
    

    Sie können auch das Offlineverhalten demonstrieren, indem Sie WLAN und Mobilfunknetze auf dem Gerät deaktivieren oder den Flugzeugmodus verwenden.

  2. Drücken Sie F5-, um die App zu erstellen und auszuführen. Beachten Sie, dass die Synchronisierung bei der Aktualisierung nach dem Start der App fehlgeschlagen ist.

  3. Geben Sie neue Elemente ein, und beachten Sie, dass push bei jedem Klicken auf " Speichern" mit einem [CancelledByNetworkError]-Status fehlschlägt. Die neuen Todo-Elemente sind jedoch im lokalen Store vorhanden, bis sie an das mobile App-Back-End übertragen werden können. Wenn Sie diese Ausnahmen in einer Produktions-App unterdrücken, verhält sich die Client-App so, als ob sie weiterhin mit dem mobilen App-Back-End verbunden ist.

  4. Schließen Sie die App, und starten Sie sie neu, um zu überprüfen, ob die von Ihnen erstellten neuen Elemente im lokalen Store beibehalten werden.

  5. (Optional) Öffnen Sie in Visual Studio Server-Explorer. Navigieren Sie zu Ihrer Datenbank in Azure–>SQL-Datenbanken. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, und wählen Sie Im SQL Server-Objekt-Explorer öffnenaus. Jetzt können Sie zu Ihrer SQL-Datenbanktabelle und ihrem Inhalt navigieren. Überprüfen Sie, ob sich die Daten in der Back-End-Datenbank nicht geändert haben.

  6. (Optional) Verwenden Sie ein REST-Tool wie Fiddler oder Postman, um Ihr mobiles Back-End mithilfe einer GET-Abfrage im Formular https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItemabzufragen.

Aktualisieren Sie die App, um ihr Mobiles App-Backend erneut zu verbinden.

Verbinden Sie die App in diesem Abschnitt erneut mit dem mobilen App-Back-End. Wenn Sie die Anwendung zum ersten Mal ausführen, ruft der OnCreate Ereignishandler OnRefreshItemsSelectedauf. Diese Methode ruft auf SyncAsync , um Ihren lokalen Speicher mit der Back-End-Datenbank zu synchronisieren.

  1. Öffnen Sie ToDoActivity.cs im freigegebenen Projekt, und setzen Sie die Änderung der applicationURL-Eigenschaft zurück.

  2. Drücken Sie die F5--TASTE, um die App neu zu erstellen und auszuführen. Die App synchronisiert Ihre lokalen Änderungen mit dem Azure Mobile App-Back-End mithilfe von Push- und Pullvorgängen, wenn die OnRefreshItemsSelected Methode ausgeführt wird.

  3. (Optional) Zeigen Sie die aktualisierten Daten mithilfe des SQL Server-Objekt-Explorers oder eines REST-Tools wie Fiddler an. Beachten Sie, dass die Daten zwischen der Back-End-Datenbank der Azure Mobile App und dem lokalen Speicher synchronisiert wurden.

  4. Klicken Sie in der App auf das Kontrollkästchen neben einigen Elementen, um sie im lokalen Store abzuschließen.

    CheckItem ruft SyncAsync auf, um jedes abgeschlossene Element mit dem Mobilen App-Back-End zu synchronisieren. SyncAsync ruft sowohl Push als auch Pull auf. Wenn Sie einen Pull für eine Tabelle ausführen, an der der Client Änderungen vorgenommen hat, wird ein Push immer automatisch ausgeführt. Dadurch wird sichergestellt, dass alle Tabellen im lokalen Speicher zusammen mit Beziehungen konsistent bleiben. Dieses Verhalten kann zu einem unerwarteten Schub führen. Weitere Informationen zu diesem Verhalten finden Sie unter Offlinedatensynchronisierung in Azure Mobile Apps.

Überprüfen des Clientsynchronisierungscodes

Das Xamarin-Clientprojekt, das Sie heruntergeladen haben, wenn Sie das Lernprogramm "Erstellen einer Xamarin Android-App " abgeschlossen haben, enthält bereits Code zur Unterstützung der Offlinesynchronisierung mithilfe einer lokalen SQLite-Datenbank. Im Folgenden finden Sie eine kurze Übersicht darüber, was bereits im Lernprogrammcode enthalten ist. Eine konzeptionelle Übersicht über das Feature finden Sie unter Offlinedatensynchronisierung in Azure Mobile Apps.

  • Bevor Tabellenvorgänge ausgeführt werden können, muss der lokale Speicher initialisiert werden. Die lokale Filialdatenbank wird initialisiert, wenn ToDoActivity.OnCreate()ToDoActivity.InitLocalStoreAsync() ausgeführt wird. Diese Methode erstellt eine lokale SQLite-Datenbank mit der MobileServiceSQLiteStore Vom Azure Mobile Apps-Client-SDK bereitgestellten Klasse.

    Die DefineTable Methode erstellt eine Tabelle im lokalen Speicher, die den Feldern im angegebenen Typ entspricht, ToDoItem in diesem Fall. Der Typ muss nicht alle Spalten enthalten, die sich in der Remotedatenbank befinden. Es ist möglich, nur eine Teilmenge von Spalten zu speichern.

      // ToDoActivity.cs
      private async Task InitLocalStoreAsync()
      {
          // new code to initialize the SQLite store
          string path = Path.Combine(System.Environment
              .GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename);
    
          if (!File.Exists(path))
          {
              File.Create(path).Dispose();
          }
    
          var store = new MobileServiceSQLiteStore(path);
          store.DefineTable<ToDoItem>();
    
          // Uses the default conflict handler, which fails on conflict
          // To use a different conflict handler, pass a parameter to InitializeAsync.
          // For more details, see https://go.microsoft.com/fwlink/?LinkId=521416.
          await client.SyncContext.InitializeAsync(store);
      }
    
  • Das toDoTable Element von ToDoActivity ist vom IMobileServiceSyncTable Typ anstelle von IMobileServiceTable. Die IMobileServiceSyncTable leitet alle CruD-Tabellenvorgänge (Create, Read, Update, Delete) an die lokale Speicherdatenbank weiter.

    Sie entscheiden, wann Änderungen durch Aufrufen IMobileServiceSyncContext.PushAsync()an das Azure Mobile App-Back-End übertragen werden. Der Synchronisierungskontext trägt dazu bei, Tabellenbeziehungen beizubehalten, indem Änderungen in allen Tabellen nachverfolgt und pusht werden, die eine Client-App geändert hat, wenn PushAsync sie aufgerufen wird.

    Der bereitgestellte Code ruft ToDoActivity.SyncAsync() auf, um zu synchronisieren, wann immer die Todoitem-Liste aktualisiert oder ein Todoitem hinzugefügt oder abgeschlossen wird. Der Code wird nach jeder lokalen Änderung synchronisiert.

    Im bereitgestellten Code werden alle Datensätze in der Remotetabelle TodoItem abgefragt, aber es ist auch möglich, Datensätze zu filtern, indem eine Abfrage-ID und Abfrage übergeben werden PushAsync. Weitere Informationen finden Sie im Abschnitt "Inkrementelle Synchronisierung in Offlinedatensynchronisierung in Azure Mobile Apps".

      // ToDoActivity.cs
      private async Task SyncAsync()
      {
          try {
              await client.SyncContext.PushAsync();
              await toDoTable.PullAsync("allTodoItems", toDoTable.CreateQuery()); // query ID is used for incremental sync
          } catch (Java.Net.MalformedURLException) {
              CreateAndShowDialog (new Exception ("There was an error creating the Mobile Service. Verify the URL"), "Error");
          } catch (Exception e) {
              CreateAndShowDialog (e, "Error");
          }
      }
    

Zusätzliche Ressourcen