Roaming von App-Daten

Entwicklerblog für Windows 8-Apps

Ein Einblick in die Entwicklung von Apps im Metro-Stil – präsentiert vom Windows 8-Entwicklerteam

Roaming von App-Daten

  • Comments 0

Mit Windows 8 verfügen Benutzer stets über aktuelle Daten, die sie aus dem Internet, von Cloud-Diensten sowie anderen Windows 8-PCs erhalten. Auch Ihre App kann durch das Roaming von App-Daten teil dieses integrierten Ökosystems werden. In diesem Beitrag geht es um das Roaming von App-Daten. Sie erfahren, worum es sich handelt, warum es wichtig ist und wie Sie in Ihrer App einsetzen.

Gründe für das Roaming von Daten

Das Roaming angepasster Einstellungen ist ein wichtiger Bestandteil der geräteübergreifenden Personalisierung, die unter Windows 8 zahlreiche Einstellungen wie beispielsweise Desktopdesigns, Hintergrundbilder und Browserfavoriten umfasst. Dabei ist Windows nur ein kleiner Teil der Personalisierungsmöglichkeiten für Benutzer. Apps sind unter Windows 8 für das Gefühl, immer in Verbindung zu stehen, von zentraler Bedeutung. Es sind Ihre Apps, die gerne verwenden und mit denen sie viel Zeit verbringen. Während Windows-Apps wie „Bing Weather“ oder „Sports“ bereits Roaming verwenden, benötigen wir Ihre Hilfe, um unsere Vorstellung von Windows 8 zu verwirklichen.

Roaming in der Cloud ist zeitgemäß, praktisch für Ihre Kunden und hilft Ihnen, Ihre App aus der Masse hervorzuheben. Dank Roaming müssen Benutzer Apps im Metro-Stil nur einmal konfigurieren. Danach können sie die App auch auf anderen PCs ganz einfach mit ihren persönlichen Einstellungen aufrufen.

Einfache Umsetzung

Unser Ziel beim Roaming von App-Daten war eine möglichst einfache Umsetzung. Wir wollten Ihnen als Entwickler die Anwendung der teilweise mühsamen und komplexen Synchronisierungstechniken ersparen. Wir wollten das Roaming aller vom Benutzer konfigurierbaren Einstellungen möglichst einfach für Sie gestalten.

Windows 8 enthält eine integrierte Roamingsynchronisierung für Anwendungsdaten aller Apps im Metro-Stil, die mit dem Microsoft-Konto eines Benutzers verknüpft sind. ApplicationData ist in drei Datentypen unterteilt, die wir als Lokalitäten bezeichnen: lokale, Roaming- sowie temporäre Daten. Die Synchronisierung der App-Daten über ein Microsoft-Konto erfolgt einfach über das Schreiben der Daten in die Roaminglokalität. Sie müssen sich über die Synchronisierungsbeziehung, das Einrichten einer Identität, die Anmeldung, das Kaufen bzw. Verwalten eines Diensts usw. keine Gedanken machen. Windows kümmert sich darum. Sie konzentrieren sich darauf, welche Daten für das Roaming in Betracht kommen, und wie Sie diesen Vorteil für Ihre App nutzen. Wenn sich Benutzer bei Windows anmelden, erfolgt auch die Anmeldung bei Ihrer App.

Ein Ablaufdiagramm mit Datenbewegungen zwischen Computer, lokalem Speicher und Cloud-Speicher

Benutzerdaten und App-Daten

Bevor wir uns ausführlich mit Roaming befassen, möchten wir den Unterschied zwischen Benutzerdaten und App-Daten verdeutlichen. Benutzerdaten sind Daten, die ein Benutzer mithilfe von Apps erstellt und verwendet, beispielsweise Dokumente, Musik, Videos und Bilder. Dies schließt sämtliche Daten ein, die Benutzern wichtig sind oder die von verschiedenen Apps verwendet werden können. Solche Daten sollten in einer der KnownFolder-Bibliotheken gespeichert oder per Roaming mithilfe der SkyDrive-APIs übertragen werden. Speichern und Roaming von Kennwörtern sollte stets über PasswordVault erfolgen. In diesem Blogbeitrag befassen wir uns mit Daten, die von Apps erstellt und verwendet werden, wie beispielsweise Einstellungen und Zustände. In der folgenden Tabelle sind Unterschiede zwischen Benutzerdaten und App-Daten sowie Anweisungen zum Roaming zusammengefasst.

Benutzerdaten

App-Daten

Können von mehreren Apps verwendet werden

Nur aussagekräftig für die App, die Daten erstellt hat

Dokumente, Musik, Bilder, exportierte Daten

Einstellungen, Favoriten, Kontext, App-Zustand

Cloud-Speicherung mit SkyDrive

Roaming mit ApplicationData

Einmal konfigurieren, überall verwenden

Wir möchten das Prinzip „Einmal konfigurieren, überall verwenden“ an einem einfachen Beispiel erläutern. Angenommen, bei einer einfachen RSS-Reader-App können Benutzer Artikel aus einer Reihe von Feeds auswählen und lesen. Beim Anzeigen eines bestimmten Feeds zeigt die App eine bestimmte Anzahl an Artikeln pro Seite an. Über die ItemsPerPage-Einstellung kann der Benutzer die Anzahl der pro Seite angezeigten Feedelemente konfigurieren. Wenn der Benutzer die Einstellung dieser App auf einem PC festlegt, soll diese Einstellung per Roaming auf andere PCs des Benutzers übertragen werden, auf denen die App installiert ist. Die ApplicationData-Klasse enthält eine RoamingSettings-Eigenschaft. Um eine Einstellungen per Roaming zu übertragen, muss diese lediglich als Wert in RoamingSettings geschrieben werden.

JS:

Windows.Storage.ApplicationData.current.roamingSettings.values[“ItemsPerPage”] = 10

C#:

Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“ItemsPerPage”] = 10;

So einfach ist das! Die Synchronisierung übernimmt Windows. Die Einstellung wird zukünftig auf allen Geräten des Benutzers synchronisiert, auf denen die App installiert ist. In der Regel greift der Benutzer auf diese Einstellung in der App über den Charm „Einstellungen“ zu. Ich empfehle, alle App-Einstellungen standardmäßig per Roaming zu übertragen. Nur gerätespezifische Einstellungen müssen nicht an Roamingorten gespeichert werden.

Wenn Sie anstelle einer Einstellung eine Datei schreiben möchten, können Sie den RoamingFolder in den Anwendungsdaten verwenden. Die Funktionsweise ist dieselbe. Wenn Sie eine Datei für das Roaming von Daten verwenden möchten, stellen Sie sicher, dass nach dem Schreibvorgang alle geöffneten Datei-Handles geschlossen werden. Das Roaming wird bei Dateien mit offenen Handles nicht ausgeführt.

Planen des Roamingkontingents

Wenn Sie nur einfache Einstellungen in Ihren Apps verwenden, ist das bisher besprochene vollkommen ausreichend. Was geschieht jedoch bei einer Favoritenliste oder einer Sammlung großer Datenmengen? Welche Größe ist erlaubt? Das Roaming von App-Daten ist für Einstellungen optimiert. Jeder App ist ein eigenes Speicherkontingent zugewiesen, das für derartige Daten geeignet ist. Das Kontingent dient dem schonenden Umgang mit Systemressourcen. Zu den wichtigen Merkmalen von Windows 8 gehören eine lange Akkulaufzeit und eine gute Systemleistung, und durch die Limitierung wird sichergestellt, dass diese Merkmale durch Roaming nicht beeinträchtigt werden. Das Kontingent steht Ihnen über die RoamingStorageQuota-Eigenschaft von ApplicationData zur Verfügung und liegt derzeit bei 100 KB. Für einen optimalen Umgang mit dem Kontingent sollten Sie die Datenverwendung Ihrer App bereits im Entwurfsstadium planen und sicherstellen, dass das Kontingent nicht überschritten wird.

Was passiert, wenn RoamingStorageQuota überschritten wird? Nichts! Genauer gesagt, das Roaming findet nicht statt. Ihre App wird weiterhin ausgeführt und kann auch weiterhin Daten aus den Roamingorten lesen und schreiben. Die Daten werden jedoch nur mit der Cloud synchronisiert, wenn sämtliche Roamingdaten in den Roamingorten kleiner sind als RoamingStorageQuota.

Ein Fehler, der bei der Planung der Verwendung von Roamingdaten häufig gemacht wird, ist das Roaming von Inhalten anstelle von Verweisen zu den Inhalten. Wenn Sie z. B. eine Reihe bevorzugter Nachrichtenartikel über Roaming speichern möchten, sollten die Artikelbezeichner oder URLs und nicht die vollständigen Artikel verwendet werden. Beim Roaming von Rohdaten anstelle von Verweisen zu verfügbaren Inhalten ist das Kontingent rasch aufgebraucht, da Speicherplatz verschwendet wird. Daher sollten beim Roaming immer Bezeichner anstelle tatsächlicher Inhalte verwendet werden.

Denken Sie schon bei der Planung von Apps daran, keine unhandlichen Datenmengen zu verwenden. Offene Datensammlungen, wie beispielsweise Favoritenlisten, sollten begrenzt werden, damit das Roamingkontingent der App nicht überschritten wird. Wenn wir uns wieder dem Beispiel RSS-Reader-App zuwenden, können wir uns vorstellen, dass eine benutzerverwaltete Liste von RSS-Feeds gespeichert werden soll. Diese offene Liste muss begrenzt werden. Hierfür ist eine kleine Schätzung erforderlich. Nehmen wir an, wir möchten der RSS-Feedliste 20 KB zur Verfügung stellen. Die Größe einer URL beträgt bei einer konservativen Schätzung 80 Bytes. Bei dieser Größe können 250 URLs in 20 KB zusammengefasst werden. Das Verkürzen von URLs kann den Bedarf weiter verringern, aber 250 URLs sind wahrscheinlich mehr Feeds als meine App jemals benötigen wird. Es ist also nur erforderlich, die geplante Größe festzulegen, die Feedliste in eine Datei zu schreiben und im RoamingFolder zu speichern.

Erstellen einer einheitlichen Umgebung auf mehreren PCs

Durch Roaming können Sie zudem dafür sorgen, dass Apps auf mehreren PCs dieselben Inhalte anzeigen. Stellen Sie sich vor, ein Benutzer liest zu Hause am Desktop-PC die neuesten Feeds und hat dann einen Termin außer Haus. Der Benutzer nimmt sein Windows 8-Tablet mit und öffnet die App. Selbstverständlich soll der Benutzer an genau der Stelle weiterlesen können, wo er am Desktop-PC aufgehört hat. Das Bereitstellen einer einheitlichen Umgebung bedeutet, dass der Kontext der Benutzerinteraktion festgehalten und per Roaming übertragen wird.

Es gibt funktional keinen Unterschied zum Roaming anderer Einstellungen, dieses Szenario unterscheidet sich jedoch etwas von den meisten Einstellungen. Der Benutzer kann sehr schnell durch Feeds navigieren, demnach kann sich diese Einstellung häufiger als andere Einstellungen ändern. Außerdem ist für einen nahtlosen Übergang erforderlich, dass genaue Daten der letzten Aktivität des Benutzers vorhanden sind. Um den Bedürfnissen des Benutzers zu entsprechen, haben wie hierfür eine einzigartige Einstellung entwickelt: HighPriority. Benennen Sie hierfür Ihre Einstellung im Stammcontainer der RoamingSettings einfach mit „HighPriority“. Sie wird wie jede andere Einstellung verwendet. Das Roamingmodul verarbeitet diese Einstellung schneller als andere Roamingdaten, um einen nahtlosen Übergang zu ermöglichen.

In unserem Beispiel muss der Feed-Bezeichner übertragen werden, um diese Funktion im Feed-Reader zu nutzen. Beim Starten oder Fortsetzen einer App wird der Bezeichner überprüft und die App mit dem entsprechenden Feed aufgerufen. Dies ist der vorherigen Einstellung sehr ähnlich, nur lautet der Einstellungsname „HighPriority“.

JS:

Windows.Storage.ApplicationData.current.roamingSettings.values[“HighPriority”] = currentFeedId;

C#:

Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“HighPriority”] = currentFeedId;

Windows kümmert sich wie immer um den Rest. Bei der Verwendung von „HighPriority“ ist wichtig zu wissen, wann die Einstellung gelesen und wann sie geschrieben werden soll. Im Allgemeinen sollte „HighPriority“ beim Starten oder Fortsetzen von Apps überprüft werden, damit der Benutzer mit der letzten Aktivität fortfahren kann, sei es auf dem aktuellen PC oder einem anderen Gerät. Bei durch den Benutzer vorgenommenen Aktionen wird in „HighPriority“ geschrieben, beispielsweise beim Aufrufen einer neuen Seite oder beim Klicken auf einen Link.

Die HighPriority-Einstellung reagiert meist unmittelbar, kann jedoch durch voreilige Schreibvorgänge gebremst werden. Unnötige Schreibvorgänge führen lediglich zu einer Leistungsminderung der App und nicht zu einer Verbesserung des Roamings. Im Allgemeinen sollten Sie darauf achten, dass „HighPriority“ den aktuellen Kontext der Benutzeraktionen spiegelt, wenn z. B. der Benutzer zu einer Seite innerhalb der App navigiert oder Inhalte durchsucht. Es gibt Apps, deren Daten sich schnell verändern, wie z. B. ein Videoplayer, der den genauen Stand des abgespielten Videos verfolgt. Wenn Sie bei jeder Änderung des Videozählers einen Schreibvorgang auf „HighPriority“ ausführen, führt dies zu einer Überlastung. Aktualisieren Sie die Einstellung daher nur dann, wenn sich der Status des Videos ändert (z. B. Wiedergabe/Anhalten), der Benutzer ein checkpoint-Ereignis auslöst oder die App angehalten wird.

Erhalten der Datenkonsistenz

Einige Daten sind eng miteinander verbunden und sollten immer gemeinsam übertragen werden. Ein klassisches Beispiel sind Koordinaten für einen Punkt. Sie sollten die X- und Y-Koordinaten von Punkten nicht einzeln übertragen, da hierbei die Möglichkeit besteht, dass Daten beschädigt oder ungültige Punkte erstellt werden. Die Einheiten für Roaming von ApplicationData sind Einstellungen und Dateien, alles innerhalb einer Datei wird demnach immer als Einheit übertragen und eine Einstellung bildet selbst eine Einheit. Wenn Sie mehrere Einstellungen gemeinsam übertragen möchten, wie beispielsweise Koordinaten, können Sie einen CompositeSettingValue verwenden. Mithilfe dieser Einstellung können Sie mehrere Einstellungen zu einem einzelnen Wert gruppieren, der stets als Einheit übertragen wird.

Die HighPriority-Einstellung kann zudem aus einem Verbund bestehen. Dadurch ist es möglich, mehrere Datenkomponenten, die den aktuellen Zustand der App wiedergeben, sicher zu übertragen. In unserem Beispiel werden die Feeds der Reader-App zum einfachen Lesen auf Seiten gruppiert. Die Feed-ID soll nur zusammen mit der Seite übertragen werden, denn die Feeds können eine unterschiedliche Seitenanzahl aufweisen. Die aktuelle Feed-ID soll mit zusammen mit der aktuellen Seite innerhalb des Feed als CompositeSettingValue übertragen werden, damit keine Widersprüche entstehen.

JS:

var currentFeed = new Windows.Storage.ApplicationDataCompositeValue();
currentFeed.insert(“CurrentFeedId”, currentFeedId);
currentFeed.insert(“CurrentFeedPage”, currentFeedPage);
Windows.Storage.ApplicationData.current.roamingSettings.values[“HighPriority”] = currentFeed;

C#:

Windows.Storage.ApplicationDataCompositeValue currentFeed = 
new Windows.Storage.ApplicationDataCompositeValue();
currentFeed.Insert(“CurrentFeedId”, currentFeedId);
currentFeed.Insert(“CurrentFeedPage”, currentFeedPage);
Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“HighPriority”] = currentFeed;

Wenn die HighPriority-Einstellung als Verbund verwendet wird, darf die Größe von 8 KB nicht überschritten werden, um alle Vorteile von „HighPriority“ nutzen zu können. Wenn die Größe von 8 KB überschritten wird, werden keine Fehler verursacht, die Einstellung wird jedoch dann wie jede andere Einstellung behandelt.

Reagieren auf eingehende Roamingänderungen

Abschließend möchte ich über das DataChanged-Ereignis von ApplicationData sprechen. Das DataChanged-Ereignis reagiert auf App-Datenänderungen und kann beispielsweise einer Hintergrundaufgabe signalisieren, dass der Benutzer eine Einstellung geändert hat. Wenn Roamingdaten in der Cloud eine lokale Änderung Ihrer App hervorrufen, sendet Windows automatisch ein Signal für dieses Ereignis. Sie können dadurch z. B. auf Situationen reagieren, in denen Daten von einem anderen PC erst nach dem erneuten Öffnen Ihrer App eintreffen. Sie können dieses Ereignis auch zum Aktualisieren der Datenansicht oder zur Reaktion auf Einstellungsänderungen verwenden. Diese Einstellung ist für Benutzer optimiert, die mehrere PCs verwenden und zwischen diesen wechseln. Daher sollten DataChanged-Ereignisse nicht für die Kommunikation zwischen PCs in Echtzeit verwendet werden.

Seien Sie dabei

Mit Verbindungen und Apps, die Roaming nutzen, bietet Windows 8 stets aktuelle Inhalte. Und wir haben eine Plattform entwickelt, die das Roaming von Daten einfach macht. Roaming über die Cloud ermöglicht es Ihren Benutzern, nahtlos zwischen PCs zu wechseln. Weitere Informationen über Roaming finden Sie in den Richtlinien für das Roaming von App-Daten. Sehen Sie sich auch das Beispiel für App-Daten an. Hier finden Sie Beispiele zu allen in diesem Blogbeitrag besprochenen Themen. Vielen Dank fürs Lesen!

– Dave Bennett, Program Manager, Windows

  • Loading...
Leave a Comment
  • Please add 2 and 2 and type the answer here:
  • Post