Windows Store

Integration von OneDrive in Ihre Windows Store-Apps

Tony Champion

Laden Sie die Codebeispiele herunter

Heutzutage ist es schwer, einer Unterhaltung in puncto Cloudentwicklung aus dem Weg zu gehen. Public, Private, lokale oder nicht lokale Cloudangebote gibt es inzwischen in allen Formen und Größen. Wenn jedoch über kundenbasierte Apps diskutiert wird, bei denen es um Benutzerdateien geht, besteht die Chance, dass Sie sich auf Angebote wie Microsoft OneDrive konzentrieren.

Das kürzlich umbenannte Microsoft OneDrive ermöglicht Kunden das bequeme Speichern, Freigeben und Zugreifen auf ihre persönlichen Daten, und zwar von überall aus auf jedem Gerät. OneDrive ist mittlerweile vollständig in allen Microsoft-Plattformen integriert. Zudem ist es mit den meisten anderen aktuell verwendeten Plattformen kompatibel. Das Freigeben, die Synchronisierung sowie der Zugriff auf Dokumente, Fotos, Videos und viele andere Dateitypen sind auf allen Geräten problemlos möglich. Wenn Sie eine App erstellen, die Benutzerdateien umfasst, sollte das Integrieren von OneDrive in Ihre App ein wichtiges Feature darstellen.

Wenn Sie Windows Store-Apps erstellen, erhalten Sie automatisch kostenlos ein bestimmtes Niveau an OneDrive-Funktionen. In Windows 8.1 sind eine Windows Store OneDrive-App sowie eine Desktopintegration im Dateisystem vorhanden, die die Dateiöffnungsauswahl- und Dateispeicherungsauswahl-Verträge enthält. Wenn sie die Dateiöffnungs- oder Dateispeicherungsauswahl in Ihrer App verwenden, hat der Benutzer demnach automatisch die Möglichkeit, Dokumente in seinem OneDrive-Konto zu öffnen oder zu speichern. Selbiges gilt für die Dialogfelder zum Öffnen und Speichern der Datei in Desktopcomputer-Apps.

Was passiert jedoch, wenn Sie ein wenig mehr Kontrolle darüber erlangen möchten, wie diese Interaktion funktioniert? Wie sieht es aus, wenn Sie die Daten des Benutzers in einem anderen Format anzeigen oder das Hoch-/Herunterladen mehrerer Dateien im Hintergrund verarbeiten möchten? Um auf solche Szenarien zu reagieren, bietet Microsoft eine API, auf die von jeder Plattform aus zugegriffen werden kann, damit Entwickler OneDrive in ihre Lösungen einpflegen können. In diesem Artikel wird diese API näher beleuchtet, und es wird untersucht, was bei der Verwendung dieser API in Ihren Windows Store-Apps involviert ist.

Vorstellung des Live SDK

Der Zugriff auf die Inhalte von OneDrive wird durch das Live SDK genutzt. Im Kern ist das Live SDK eine Sammlung an JSON-basierten REST-APIs, die von jeder Plattform verarbeitet werden können. Das Live SDK verwendet die einmalige Anmeldung für Windows Store- und Windows Phone Store-Apps und die OAuth 2.0-Authentifizierung für andere Plattformen. Um Entwicklern dabei zu helfen, mithilfe von OneDrive erfolgreiche Anwendungen zu erstellen, hat Microsoft auch clientspezifische SDKs veröffentlicht. Zurzeit gibt es SDKs für die Microsoft Windows- und Windows Phone-Plattformen sowie SDKs für Android und iOS. Links zu all diesen SDKs finden sich unter msdn.microsoft.com/onedrive/dn630256. Das Live SDK kann auch mithilfe von NuGet (nuget.org/packages/LiveSDK) hinzugefügt werden.

In Bezug auf OneDrive besteht die primäre Rolle des Live SDK darin, den programmatischen Zugriff auf Dateien und Ordner im Konto eines Benutzers zu ermöglichen. Im Folgenden finden Sie die grundlegenden Dienste, die durch das SDK bereitgestellt werden:

  • Navigieren durch die Ordnerhierarchie
  • Erstellen und löschen neuer Ordner
  • Lesen und ändern von Ordnereigenschaften
  • Hoch- und Herunterladen von Dateien
  • Lesen und ändern von Dateieigenschaften
  • Kopieren und verschieben von Dateien und Ordnern
  • Abrufen von Links zum Freigeben von Dateien und Ordnern
  • Festlegen von Berechtigungen auf Dateien und Ordner

Ich verwende Visual Studio 2013 Update 2 und das Live SDK Version 5.6, um herauszufinden, wie das SDK in einer Windows 8.1 Store-App verwendet wird, die die XAML geschrieben wurde. Durch die Verfügbarkeit von clientspezifischen SDKs für die meisten Plattformen können die gleichen Konzepte einfach zur gewünschten Sprache und Plattform migriert werden.

Entwickeln von Apps mithilfe des Live SDK

Bevor Sie mit der Entwicklung von Apps mithilfe des Live SDK beginnen können, müssen einige organisatorische Dinge geregelt werden. Da das Live SDK kein Bestandteil des Windows SDK-Herzstücks ist, müssen Sie das Live SDK herunterladen und anschließend aus Ihrer App einen Verweis dazu hinzufügen. Klicken Sie zum Hinzufügen des Verweises einfach mit der rechten Maustaste auf Ihre Lösung in Visual Studio 2013, und wählen Sie "Verweis hinzufügen" aus. Das Live SDK befindet sich im Abschnitt "Windows 8.1-Erweiterungen" des Verweis-Managers (siehe Abbildung 1).

Hinzufügen eines Verweises zum Live SDK
Abbildung 1 – Hinzufügen eines Verweises zum Live SDK

Die Funktion "Internet (Client)" ist bei einer Windows 8.1 Store-App standardmäßig in ihrem AppxManifest aktiviert. Hierbei handelt es sich um eine erforderliche Funktion für die Verwendung des Live SDK, und sie muss in Ihrem Projekt aktiviert sein. Öffnen Sie zum Überprüfen oder Aktivieren dieser Funktion das AppxManifest Ihres Projekts im Designer, und stellen Sie sicher, dass "Internet (Client)" auf der Registerkarte "Funktionen" aktiviert ist.

Sobald Ihrem Projekt das Live SDK hinzugefügt wurde, wird die gesamte SDK im Microsoft.Live-Namespace angezeigt. Die Verwendung des SDKs zu diesem Zeitpunkt führt jedoch zu einem Fehler vom Typ "null object reference" (ungültiger Objektverweis). Der Grund hierfür ist, dass Sie Ihre App bei den Live-Diensten registrieren müssen, bevor Sie auf OneDrive zugreifen können. In Abhängigkeit der Plattform, auf der Sie Entwicklungen vornehmen, kann dies auf verschiedene Art erfolgen. Bei einer Windows Store-App verknüpfen Sie Ihre App einfach mit dem Windows Store. Der direkte Weg liegt in der Verwendung des Assistenten in Visual Studio.

Klicken Sie zum Starten des Assistenten mit der rechten Maustaste auf das Store-Projekt im Projektmappen-Explorer, und wählen Sie "Store | App mit Store verknüpfen" aus. Der Assistent wird geöffnet, und es wird beschrieben, was Sie benötigen, um fortzufahren. Das Auswählen von "Weiter" führt dazu, dass Sie aufgefordert werden, sich bei einem mit dem Windows Store (wenn Sie nicht bereits angemeldet sind) verknüpften Microsoft-Konto anzumelden. Sie müssen möglicherweise einen zweiten Überprüfungsvorgang durchlaufen, dazu zählt beispielsweise das Empfangen eines Autorisierungscodes per SMS auf der Telefonnummer, die mit Ihrem Konto verknüpft ist. Sobald Sie den Anmeldevorgang abgeschlossen haben, wird Ihnen eine Liste mit sämtlichen reservierten App-Namen angezeigt, die mit Ihrem Konto verknüpft sind (siehe Abbildung 2). Wenn es sich um eine neue App handelt, können Sie auch einen neuen App-Namen auf diesem Bildschirm reservieren. Sobald Sie Ihre App mit einem Namen verknüpfen können, führt Sie die Auswahl von "Weiter" zu einem Übersichtsbildschirm. Durch Klicken auf "Zuordnen" wird der Vorgang anschließend abgeschlossen.

Verknüpfen eines reservierten Namens mit einer App
Abbildung 2 – Verknüpfen eines reservierten Namens mit einer App

Ihre App ist nur eingerichtet und kann mit dem Live SDK verwendet werden.

Zugreifen auf Benutzerdaten

Der erste Schritt zum Aktivieren der OneDrive-Integration in Ihre App besteht im Erlangen der Möglichkeit, auf die Informationen des Benutzers zuzugreifen. Wie bereits erwähnt, verwendet das Live SDK 0Auth 2.0 für die Autorisierung. Neben der einfachen Authentifizierung Ihrer App gibt es jedoch noch einige zusätzliche Punkte, die bedacht werden sollten.

Entsprechende Verwendung von OneDrive. Wenn Sie mit dem Entwickeln und Bereitstellen von Windows Store-Apps vertraut sind, wissen Sie, dass es einige Richtlinien gibt, in denen detailliert beschrieben wird, was Sie in Ihrer App machen können und was nicht. OneDrive fügt eigene Richtlinien hinzu, die auch beachtet werden müssen.

Der Einschränkungen begründen sich hauptsächlich darin, dass das Vertrauen der Benutzer in OneDrive nicht durch Sie untergraben werden darf. Wenn ein Benutzer über eine zentrale Quelle für das Speichern der persönlichen Informationen verfügt, vertraut er der Quelle entweder oder verwendet sie nicht. Durch den Zugriff auf OneDrive mit Ihrer App weitet der Benutzer dieses Vertrauen auf Ihre App aus. Wenn Ihre App jedoch die Daten des Benutzers ohne dessen Zustimmung oder Wissen löscht, untergraben Sie das Vertrauen und beeinflussen nicht nur die Wahrnehmung des Benutzers Ihrer App, sondern auch die Wahrnehmung, die er in Bezug auf OneDrive hat. Daher sollten Sie äußerste Vorsicht walten lassen, wenn es darum geht, wie Ihre App mit OneDrive interagiert, insbesondere beim Ausführen von Funktionen, bei denen Benutzerinformationen aktualisiert oder entfernt werden. Eine Beschreibung dieser Richtlinien finden Sie unter bit.ly/1rQ8iXK.

Verwendung der einmaligen Anmeldung. Bei Verwendung des Live SDK in einer Windows Store-App schlägt Ihnen Microsoft vor, von seinen SSO-Features (Single Sign-On, einmalige Anmeldung) zu profitieren. Wie auch beim Hinzufügen des Live SDK sind beim Hinzufügen von SSO zu Ihrer App einige zusätzliche Anforderungen gegeben, dazu zählen Datenschutzbestimmungen und ein Kontoeinstellungsbereich. Vollständige Details in Bezug auf die Schritte zum Hinzufügen der erforderlichen Komponenten zu Ihrer App finden Sie unter bit.ly/TJvTxB.

Nach der Vorbereitung Ihrer App für SSO erfolgt das Anmelden am Benutzerkonto mithilfe einer Instanz der Klasse "LiveAuthClient". "LiveAuthClient" weist die Methode "LoginAsync" auf, die die Anmeldedaten des Microsoft-Kontos verwendet, das derzeit am Windows 8.1-Gerät angemeldet ist. Wenn die Anmeldung erfolgreich ist, enthält das Objekt "LiveLoginResult" eine "LiveConnectSession"-Instanz, die für alle Aufrufe zum Live SDK verwendet wird. So wird der Benutzer angemeldet, und das "Session"-Objekt wird zurückgegeben:

LiveAuthClient authClient = new LiveAuthClient();
LiveLoginResult authResult = 
  await authClient.LoginAsync(new List<string>() {
  "wl.signin",
  "wl.basic", "wl.skydrive", "wl.skydrive_update" });
if (authResult.Status == LiveConnectSessionStatus.Connected)
{
  // Add code to handle session held in the Session property
}

Bereiche. Sie haben wahrscheinlich die Verwendung von Bereichen wie "wl.signin" im vorherigen Code bemerkt. Wenn sich Ihre App an einem Benutzerkonto anmeldet, muss sie angeben, welchen Zugriffstyp sie benötigt. Wenn Sie versuchen, Teilmengen der API zu verwenden, für die Sie keinen Zugriff angefordert haben, sind Ihre Versuche fehlerhaft. Bei Windows Store-App ist das nicht anders, als auf Teilmengen des Windows SDKs zuzugreifen, auf die Sie den Zugriff im Abschnitt mit den Funktionen des Pakets "appxmanifest" nicht angefordert haben.

In den Beispielen dieses Artikels werde nur die vier Bereiche verwendet. Mit dem "wl.signin"-Bereich können Sie vom SSO-Verhalten profitieren, das Sie in Windows Store-Apps verwenden sollten. Der "wl.basic"-Bereich ermöglicht den Zugriff auf einige allgemeine Informationen über den Benutzer.

Bei OneDrive-Anwendungen gibt es nur zwei zusätzliche Bereiche, um die Sie sich kümmern müssen: "wl.skydrive" und "wl.skydrive_update". Wie die Namen wahrscheinlich verraten, ist "wl.skydrive" für den Lesezugriff und die Berechtigung zum Durchsuchen auf das OneDrive-Konto eines Benutzers erforderlich. Wenn Sie Ihre App die Fähigkeit zum Hochladen von Dateien, Erstellen oder Löschen von Ordnern oder Ändern der Eigenschaften eines Objekts benötigt, verwenden Sie den Bereich "wl.skydrive_update". Dieser Bereich gewährt Ihnen außerdem Leseberechtigungen auf OneDrive. So müssen Sie nicht sowohl "wl.skydrive" als auch "wl.skydrive_update" in die Zugriffsliste aufnehmen.

Damit die Abwärtskompatibilität mit Apps unter Verwendung des vorherigen Brandings aufrechterhalten werden kann, wurden die OneDrive-Bereichsnamen nicht geändert. Es würde mich jedoch nicht überraschen, einige zusätzliche Bereiche mit dem OneDrive-Branding in künftigen Versionen der API zu sehen.

Da das Live SDK wesentlich mehr abdeckt als nur OneDrive, gibt es viele andere Bereiche, die den Rahmen dieses Artikels sprengen würden. Eine Liste mit vollständigen Beschreibungen finden Sie unter msdn.microsoft.com/library/dn631845.

Erhalten der Benutzerzustimmung. Beim ersten Ausführen einer App durch einen Benutzer, die den Zugriff auf sein OneDrive-Konto anfordert, wird er aufgefordert, der App die Berechtigung auf die im Anmeldeaufruf angegebenen Bereiche zu gewähren. Abbildung 3 veranschaulicht ein solches Beispiel einer Aufforderung in einer Windows Store-App. Sobald der Benutzer die Berechtigung erteilt hat, wird er nicht wieder aufgefordert, solange sich die Bereichsliste nicht ändert. Wenn eine aktualisierte Version der App zusätzliche Features der API anfordert, wird der Benutzer erneut aufgefordert, die Berechtigung zu erteilen.

Anfordern der Benutzerzustimmung für den Zugriff auf OneDrive
Abbildung 3 – Anfordern der Benutzerzustimmung für den Zugriff auf OneDrive

Objekte auf OneDrive

Die OneDrive-API interpretiert alles als Objekt. Ob Ordner, Foto oder Tabellenkalkulation – alle in OneDrive gespeicherten Elemente verfügen über einen Satz ähnlicher Eigenschaften, und sie verwenden API-Aufrufe gemeinsam. Jedes Objekt hat eine Sammlung von Eigenschaften und möglicherweise eine Sammlung an untergeordneten Objekten. Die von mir in diesem Artikel näher beleuchteten Objekttypen sind: Ordner, Datei, Album und Foto. Eine vollständige Liste der verfügbaren Objekte finden Sie mitsamt ihrer Beschreibung und Verwendung unter msdn.microsoft.com/library/dn631843.

Sobald Ihre App eine Instanz von "LiveConnectionSession" aus der Methode "LoginAsync" von "LiveAuthClient" abruft, kann diese Sitzungsinstanz zum Erstellen einer Instanz der Klasse "LiveConnectClient" verwendet werden, die sämtliche API-Aufrufe enthält, die Sie für die Interaktion mit OneDrive verwenden. Im folgenden Beispiel wird das Erstellen einer Instanz des "LiveConnectClient" und das Abfragen von OneDrive für das Stammordnerobjekt eines Benutzers gezeigt, welches unter Verwendung des Pfads "me/skydrive" abgerufen werden kann:

public async Task<object> GetRootFolder()
{
  LiveConnectClient client = new LiveConnectClient(_session);
  LiveOperationResult liveOpResult = 
    await client.GetAsync("me/skydrive");
  dynamic dynResult = liveOpResult.Result;
  return dynResult;
}

Dieser Code verwendet das dynamische Schlüsselwort zum Erstellen einer Klasseninstanz der zugrunde liegenden JSON-formatierten Zeichenfolge zur Laufzeit. Auch wenn dieser schnell und einfach verwendet werden kann, sollten Sie bedenken, dass es möglicherweise einige Beschränkungen gibt, die eine weitaus formalere Klassenstruktur erfordern würden.

Die von der Methode "GetAsync" zurückgegebenen Ergebnisse enthalten sämtliche Eigenschaften für das angeforderte Objekt. Abbildung 4 zeigt ein Beispiel der JSON-formatierten Zeichenfolge, die für den Stammordner eines Benutzers zurückgegeben wird.

Abbildung 4 – Aus einer Ordnerobjektabfrage zurückgegebenes JSON-Element

{
  "id": "folder.abced3a35e6d1b",
  "from": {
    "name": null,
    "id": null
  },
  "name": "SkyDrive",
  "description": "",
  "parent_id": null,
  "size": 2957188732,
  "upload_location": 
    "httpss://apis.live.net/v5.0/folder.abced3a35e6d1b/files/",
  "comments_count": 0,
  "comments_enabled": false,
  "is_embeddable": false,
  "count": 25,
  "link": "httpss://onedrive.live.com?cid=abced3a35e6d1b",
  "type": "folder",
  "shared_with": {
    "access": "Just me"
  },
  "created_time": null,
  "updated_time": "2014-06-13T18:00:54+0000",
  "client_updated_time": "2012-10-22T19:50:04+0000"
}

Bei der Abfrage in OneDrive kann es sich als hilfreich erweisen, eine spezifischere Abfrage zu erstellen. Beispielsweise werden im Folgenden sämtliche untergeordneten Objekte im Stammverzeichnis zurückgegeben:

LiveOperationResult liveOpResult = await client.GetAsync("me/skydrive/files");

Dies umfasst Ordner und Dateien, es könnten somit eine Menge Daten sein.

Wie sieht es aus, wenn Sie nur eine Liste der Fotos in diesem Verzeichnis anzeigen möchten? Dies kann mithilfe der Filterabfrageparameter umgesetzt werden. Die OneDrive-API unterstützt neben der Filterung mehrere verschiedene Abfrageparametertypen, dazu zählen beispielsweise "limit", "offset" und "search". Die Parameter ermöglichen Ihnen, nur genau die gewünschten Daten abzurufen, und sie begrenzen nicht nur die herunterzuladende Datenmenge, sondern auch die Menge an Code, die für das Verarbeiten der zurückgegebenen Daten erforderlich ist.

Beispielsweise gibt die folgende Abfrage nur eine Liste der Fotos im Stammverzeichnis zurück, was Ihnen das Schreiben von Code erspart, um die Fotos aus den Ordnern zu trennen:

LiveOperationResult liveOpResult =
  await client.GetAsync("me/skydrive/files?filter=photos");

Eine vollständige Liste der Abfrageparameter und ihrer Verwendung findet sich unter msdn.microsoft.com/library/dn631842.

Arbeiten mit Ordnern

Wenn Sie mit einem beliebigen Dateisystem arbeiten, stellt die Ordnerstruktur einen logischen Ausgangspunkt dar. Bei der Ordnerabfrage können Sie zwei unterschiedliche ID-Typen verwenden: ein Anzeigepfad wie "me/skydrive" oder eine Ordner-ID wie "folder.abcde86dfb3a35e6d1b.ABCDED3A35E6D1B!532". Wenn Sie eine Liste mit untergeordneten Objekten eines Ordners abfragen möchten, können Sie "/files" an den Pfad anfügen. Beispielsweise wird im Folgenden eine Liste sämtlicher Dateien, Ordner und Alben für eine angegebene Ordner-ID zurückgegeben:

LiveOperationResult liveOpResult =
  await client.GetAsync("folder.abcde86dfb3a35e6d1b.ABCDED3A35E6D1B!532/files");

OneDrive enthält zwei Ordnerobjektetypen: "folder" und "album". Ein "album" kann als ein besonderer Ordnertyp angesehen werden, der sich im OneDrive-Stammverzeichnis eines Benutzers befindet. Alben können Fotos und Videos sowie eine Ordnerstruktur und zusätzliche Dateien enthalten.

Es ist wichtig, den Unterschied zwischen einem Ordner und einem Album zu verstehen, da die folgende Abfrage nur Ordner in Ihrem Stammverzeichnis zurückgeben und sämtliche Alben ignorieren würde. Dies könnte zu unerwarteten Ergebnissen führen:

LiveOperationResult liveOpResult =
  await client.GetAsync("me/skydrive/files?filter=folders");

Verwenden Sie den Filterwert "folders,albums", um Ordner und Alben zurückzugeben.

Die vorherige Abfrage ermöglicht Ihnen, die gesamte Ordnerstruktur des OneDrive-Kontos eines Benutzers zu durchsuchen, indem die untergeordneten Ordner jedes Ordners abgerufen werden. Der zugehörige Download für diesen Artikel enthält die Beispiel-App "MyPhotoAlbum". Hierbei handelt es sich um eine XAML Windows Store-App, die zwei Seiten enthält. Auf der ersten Seite "FolderPage" können Sie Ihre Verzeichnisstruktur durchsuchen und die Ergebnisse in einer "GridView" anzeigen. Sämtliche Live SDK-Aufrufe sind in der Klasse "OneDriveDataProvider" umschlossen.

Abbildung 5 zeigt die zum Durchlaufen der Ordnerstruktur verwendete Methode, indem die aktuelle Ordner-ID weitergegeben und "folders,albums" als Filterwert verwendet wird. Wenn Sie Ordner-ID nicht vorhanden ist, wird die Methode auf das Stammverzeichnis zurückgesetzt.

Abbildung 5 – die Methode "GetFolderItems"

public async Task<List<object>> 
  GetFolderItems(string path, string filter)
{
  if (_session == null)
  {
    await InitProvider();
  }
  if (String.IsNullOrEmpty(path))
  {
    path = "me/skydrive";
  }
  if (!String.IsNullOrEmpty(filter))
  {
    filter = "?filter=" + filter;
  }
  LiveConnectClient client = new LiveConnectClient(_session);
  LiveOperationResult liveOpResult =
    await client.GetAsync(path + "/files" + filter);
  dynamic dynResult = liveOpResult.Result;
  return new List<object>(dynResult.data);
}

Abbildung 6 zeigt ein Beispiel der in "FolderPage" zurückgegebenen Ergebnisse. Die Auswahl eines untergeordneten Ordners führt zum Wechsel zum selben "FolderPage"-Element, wobei der untergeordnete Ordner als ein Parameter verwendet wird. Dadurch kann der Navigationsstapel die "back"-Funktionalität beibehalten, um zurück zur Ordnerstruktur wechseln zu können.

Abbildung 6 – "FolderPage"
Abbildung 6 – "FolderPage"

Wenn Sie mithilfe des Bereichs "wl.skydrive_update" einen Aktualisierungszugriff angefordert haben, können Sie mithilfe der API auch Ordner erstellen und löschen. Ein Ordner enthält nur drei Eigenschaften, die Sie erstellen oder ändern können: "name", "description" und "sort_by". Beim Erstellen eines Ordners müssen Sie ein übergeordnetes Verzeichnis angeben, und zwar entweder nach Pfad oder ID, und ein JSON-Array mit einem Namen (Mindestvoraussetzung) bereitstellen. Im Folgenden finden Sie ein Beispiel des für das Erstellen eines neuen Ordners erforderlichen JSON-Elements:

{
 "name": "My Favorite Photos",
 "description": "A folder full of my favorite photos."
}

Das SDK verarbeitet dies durch die "PostAsync"-Methode von "LiveConnectClient". Abbildung 7 zeigt die zum Erstellen eines neuen Ordners verwendete Methode.

Abbildung 7 – die Methode "CreateFolder"

public async Task<bool> CreateFolder(string path, string name)
{
  try
  {
    var folderData = new Dictionary<string, object>();
    folderData.Add("name", name);
    LiveConnectClient liveClient = new LiveConnectClient(_session);
    LiveOperationResult operationResult =
      await liveClient.PostAsync(path, folderData);
    dynamic result = operationResult.Result;
    return true;
  }
  catch (LiveConnectException exception)
  {
    return false;
  }
}

Das Löschen eines Ordners erfolgt mithilfe der "CreateFolder"-Methode, die auch zum Löschen von Dateien verwendet werden kann. Beachten Sie abermals, die OneDrive-Integrität zu bewahren und sämtliche Löschfunktionen mit Vorsicht zu verwenden.

LiveOperationResult operationResult = await liveClient.DeleteAsync(path);

Arbeit mit Dateien

Die Methode "GetAsync" gibt zwar die Eigenschaften einer Datei, nicht aber die Datei an sich zurück. Die einzige Möglichkeit, eine Datei aus OneDrive abzurufen, besteht darin, sie herunterzuladen. Das Live SDK für Windows Store-Apps handhabt dies durch das Erstellen einer im Hintergrund ausgeführten Downloadaufgabe, die das Herunterladen asynchron vornimmt, um das Gerät nicht ins Stocken zu bringen. Der folgende Code kann zum Herunterladen einer Datei aus OneDrive verwendet werden:

try
{
  LiveConnectClient liveClient = new LiveConnectClient(_session);
  LiveDownloadOperation op =
    await liveClient.CreateBackgroundDownloadAsync(filePath);
  var result = await op.StartAsync();
  // Handle result
}
catch
{
  // Handle errors
}

Sobald der im Hintergrund ausgeführte Downloadvorgang zurückgegeben wurde, muss er gestartet werden, indem die Methode "StartAsync" der Instanz "LiveDownload­Operation" aufgerufen wird.

Ähnlich wie beim Herunterladen einer Datei besteht die einzige Möglichkeit zum Hinzufügen oder Aktualisieren einer Datei in OneDrive darin, sie hochzuladen. Zum Hochladen einer Datei muss Ihre App den Schreibzugriff mithilfe des Bereichs "wl.skydrive_update" angefordert haben. Die Methode "CreateBackgroundUploadAsync" verwendet einen Ordnerpfad, einen Dateinamen, den die Datei enthaltenen Stream und die Option zum Überschreiben. Wenn die Datei bereits vorhanden ist, kann die Option zum Überschreiben die ursprüngliche Datei entweder überschreiben oder beibehalten und die neue hochzuladende Datei umbenennen. Geben Sie wie auch bei den Ordneraktualisierungsfunktionen acht, wenn Sie dieses Feature verwenden, um nicht versehentlich Dateien zu löschen. Im Folgenden Sie ein Beispiel, wie eine Datei hochgeladen wird:

try
{
  LiveConnectClient liveClient = new LiveConnectClient(_session);
  LiveUploadOperation op = await liveClient.CreateBackgroundUploadAsync(
    path, filename, fileStream, OverwriteOption.Rename);
  var result = await op.StartAsync();
  // Handle result
}
catch
{
  // Handle errors
}

Vor dem Hochladen einer Datei muss sichergestellt werden, dass der Benutzer über genug Speicherplatz für die neue Datei verfügt. Sie können den verfügbaren Speicherplatz mithilfe des Pfads "me/skydrive/quota" in der Methode "GetObjectAsync" überprüfen. Dadurch werden die zwei Eigenschaften "quota" und "available" zurückgegeben, welche Ihnen ermöglichen, die Anzahl der im Konto des Benutzers verbleibenden Bytes zu berechnen.

Es gibt zwei zusätzliche Features in der API, die sich beim Arbeiten mit Dateien als nützlich erweisen. Wenn Sie eine Kopie einer Datei vornehmen möchten, könnten Sie die Datei herunterladen und sie anschließend unter Verwendung eines anderen Namens hochladen. Dafür wäre jedoch eine große Bandbreite für einen vergleichsweise einfachen Vorgang vonnöten. Wie wäre es darüber hinaus, wenn Sie einen gesamten Ordner kopieren oder einen untergeordneten Order zu einem anderen übergeordneten Ordner verschieben würden? Sowohl der Code als auch die Bandbreite, die für die Verwendung der Downloads und Uploads erforderlich wären, würden solche Vorgänge ziemlich sperrig machen. Um auf diese Funktionen abzuzielen, verfügt die OneDrive-API über Befehle zum Verschieben und Kopieren: "MoveAsync" und "CopyAsync". Beide übernehmen zwei Parameter: das zu verschiebende Objekt – Datei oder Ordner – und den Zielpfad. Abbildung 8 zeigt die zum Kopieren einer Datei verwendete Methode.

Abbildung 8 – Kopieren einer Datei

public async Task<bool> CopyObject(string path, string destination)
{
  if (_session == null)
  {
    await InitProvider();
  }
  try
  {
    LiveConnectClient liveClient = new LiveConnectClient(_session);
    LiveOperationResult operationResult =
      await liveClient.CopyAsync(path, destination);
    return true;
  }
  catch (LiveConnectException exception)
  {
    return false;
  }
}

Zusammenfassung

Nur so viel einer API kann in einem einzelnen Artikel enthalten sein. Das Live SDK enthält viele weitere Features, besonders für das Verarbeiten von Fotos und Videos. Wenn Sie nach Informationen zur Integration von OneDrive in Ihre Lösung suchen, wäre es hilfreich, diese zusätzlichen Features zu durchsuchen. Microsoft hat das OneDrive Development Center erstellt, um Ihnen einen zentralen Zugriffspunkt für alles zu bieten, was mit der OneDrive-API in Zusammenhang steht (siehe dev.onedrive.com).

Unabhängig davon, ob Sie Windows Store-Apps, Windows Phone Store-Apps oder eine App für eine beliebige andere Plattform erstellen, die Zugriff auf die Datei eines Benutzers erfordert, ist das Hinzufügen von OneDrive eine tolle Möglichkeit, um Ihre App in das alltägliche Leben eines Benutzers einfließen zu lassen, indem sie ihm Zugriff auf die Dateien gewährt, die ihm am wichtigsten sind. Wenn Sie also Ihre tolle Benutzerumgebung erstellen, vergessen Sie nicht, OneDrive einzubeziehen.


Tony Champion ist sowohl Präsident von Champion DS als auch ein Microsoft MVP. Er ist als Sprecher, Blogger und Autor in der Community aktiv. Unter tonychampion.net betreibt er einen Blog. Seine E-Mail-Adresse lautet tony@tonychampion.net.

Unser Dank gilt dem folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Mimi Sasouvanh
Mimi Sasouvanh ist ein Inhaltsentwickler im Microsoft Operation Systems Group Content-Team. Sie schreibt u. a. über die OneDrive-Entwicklung und Azure Intelligent Systems Service. Ihre Freizeit verbringt sie mit ihrer Familie. Zudem befasst sie sich mit Gartenarbeit und zeichnet.