Techtalk: Multi-Device Apps mit Xamarin und dem Office 365 API

MobileTechtalk
Techtalk: Multi-Device Apps mit Xamarin und dem Office 365 API

Die Zusammenarbeit mit den Teamkollegen über SharePoint hat viele Vorteile, welche man nicht nur im Büro, sondern auch im Sinne eines flexiblen Arbeitsorts unterwegs nutzen möchte. Mit einer Proof of Concept App, entwickelt mit Xamarin und dem Office 365 API, haben wir getestet, ob die Mängel, die SharePoint bei der Bedienung auf mobilen Geräten aufweist, ausgeglichen werden können. Unser Techtalk erläutert, wie der Zugriff auf Office 365 möglich ist und wie bei der Entwicklung der App vorgegangen wurde.

Zugriff auf Office 365
Das Office 365 REST API bietet die Möglichkeit, einfach auf unsere Daten in Office 365 zuzugreifen. Momentan gibt es zwei verschiedene Arten dies zu tun. Die folgenden zwei Abschnitte beschreiben diese Möglichkeiten. 

Applikationspezfisches API

Service

FunktionURL

Azure AD Graph

Benutzer, Gruppen, Applikationen und Geräte

https://graph.windows.net

Exchange Online

Mail, Kalender, Kontakte

https://outlook.office365.com/api

SharePoint Online

Listen, Bibliotheken, Suche, Benutzerprofile

https://<tenant>.sharepoint.com/_api

OneDrive for Business

Dateien, Ordner

https://<tenant>-my.sharepoint.com/_api

OneNote

Notizen, Seiten

https://www.onenote.com/api

Yammer

Konversationen

https://www.yammer.com/api

Video Portal

Videos, Kanäle

https://<tenant>.sharepoint.com/portals/hub/_api

Discovery Service

Endpunkt Url’s

https://api.office.com


Pro Dienst auf Office 365 gibt es einen Endpunkt, der die dienstspezifischen Methoden zur Verfügung stellt. Diese API’s sind sehr mächtig und bieten Zugriff auf alle möglichen Daten und Funktionen. Die Dokumentation ist unter http://dev.office.com verfügbar. Ein wesentlicher Nachteil ist, dass pro Dienst immer wieder der Discovery Service für die Endpunkt URL angefragt werden und danach jeweils eine Authentifizierung stattfinden muss. Dies führt zu einer Menge Datenverkehr zwischen dem Client und Office 365.

Graph API

Das Graph API (früher Unified API) fasst alle Dienste in einem Endpunkt zusammen, somit ist die Authentifizierung nur einmal nötig. Zusätzlich zu allen Diensten ist auch der Office Graph integriert. Der momentane Nachteil dieses API ist, dass noch nicht alle Methoden vorhanden sind, welche die applikationsspezifischen API’s zur Verfügung stellen. Microsoft arbeitet mit Hochdruck daran, neue Funktionen einzubauen. Die Dokumentation und der Graph Explorer (Testseite für das Graph API) sind unter http://graph.microsoft.io verfügbar.

Erstellen einer Multi-Device App mit Xamarin

Die folgenden Abschnitte beschreiben, welche Konfiguration nötig ist, damit die App funktioniert und welche Punkte bei der Entwicklung zu beachten sind.

App Registrieren
Damit man mit einer App auf Office 365 Daten zugreifen kann, muss diese im Azure AD des Office 365 Tenant registriert und müssen die Dienste ausgewählt werden, auf welche man zugreifen möchte. In unserem Fall sind dies das Exchange API sowie das Graph API.

XAMARIN

Ablauf Authentifizierung
Die Authentifizierung auf Office 365 ist nicht ganz einfach, weshalb das Thema hier noch aufgegriffen wird, um zu erläutern was dabei genau abläuft.

Authentifizierung

Ablauf Authentifizierung auf Office365 

1. Die App macht einen Request auf https://login.microsoftonline.com mit der Tenant ID und der Client ID, die Client ID wird bei der Registrierung im Azure AD generiert.

2. Danach erfolgt ein Redirect auf die Login Seite, wo der Benutzer Benutzername und Passwort eingeben muss.

3. Ist die Eingabe erfolgt, liefert Azure AD den Authorization Code zurück, dieser definiert auf welche Services die App berechtigt ist.

4. Mit diesem Code muss danach ein Access Token angefordert werden; wichtig dabei ist, dass man auch definiert, welche Ressource man Abfragen will, z.B https://outlook.office365.com. Ist die App für diese Ressource nicht berechtig bekommt man kein Access Token.

5. Danach kann man mit der Abfrage der Ressource (z.B alle meine Kontakte https://outlook.office365.com/api/v1.0/me/contacts) beginnen, wobei es zu beachten gilt, dass bei jeder Abfrage das Access Token im Header mitgeliefert werden muss.

6. Möchte man die Ressource wechseln (z.B auf https://graph.microsoft.com), muss ein neues Access Token abgefragt werden

Microsoft stellt für die gesamte Authentifizierung Libraries (genannt ADAL) zur Verfügung – und dies für sehr viele Plattformen z.B .NET, iOS, Android, node.js usw. Durch die Verwendung dieser Library ist die Authentifizierung in der App in ein paar Zeilen Code umgesetzt.

Warum Xamarin
Xamarin ist eine Plattform, die uns die Möglichkeit bietet, Apps in unserem gewohnten Umfeld zu realisieren. Die Entwicklungsumgebung ist Visual Studio und die Sprache C#, somit muss keine gerätespezifische Programmiersprache eingesetzt werden, um Apps zu entwickeln. Ein weiterer Vorteil ist, dass die Business Logik der App nur einmal programmiert werden muss und dann für alle Geräte verwendet werden kann. Für die Benutzeroberfläche bietet uns Xamarin zwei verschiedene Möglichkeiten an:

Verwendung von Xamarin Forms:
1. Mit Xamarin Forms erstellt man das UI ebenfalls nur einmal, die Forms werden dann zu native Forms für iOS, Android oder Windows Phone Forms umgewandelt. Bei dieser Art Apps zu entwickeln, muss man bei der Benutzeroberfläche gewisse Kompromisse eingehen, da die Umwandlung nicht immer perfekt ist.

2. Man verwendet von Anfang an native Forms und kann somit die Stärken der jeweiligen Plattform ausnutzen. Der Nachteil ist hierbei, dass man Kenntnisse der jeweiligen Plattform, für die man entwickelt, haben muss.

Plattformen Library

Wie wurde vorgegangen?
Xamarin wurde mittlerweile von Microsoft gekauft und ist nun gratis für das Visual Studio verfügbar – einfach Xamarin auf http://www.xamarin.com herunterladen. Dann kann es losgehen.

Für unseren Proof of Concept fiel die Entscheidung auf Xamarin Forms, da wir XAML als UI Beschreibungssprache bereits bekannt war. Den Zugriff auf Office 365 wurde dann in einer Core Library gekapselt, sodass wir diesen Code nicht mehrfach schreiben mussten. Das einzige, was plattformspezifisch implementiert werden musste, war die Authentifizierung – dies aus dem Grund, weil die ADAL Library von Plattform zu Plattform verschieden ist und der Token pro Plattform anders gespeichert werden muss.

Für die Authentifizierung wurde das folgende Vorgehen gewählt:

In der Core Library wird ein Interface definiert:

Pro Plattform (iOS, Android usw.) wird davon eine Implementation erstellt:

Im Start Form der Applikation kann dies mit Hilfe des Xamarin Dependency Service für die jeweilige Plattform erstellt werden. Das zurückgelieferte Resultat der Authentifizierung wird in der App gespeichert, damit man sich beim nächsten Aufruf nicht wieder anmelden muss.

Für die Abfrage der Office 365 Daten wird der HttpClient aus dem .NET Framework verwendet. Das folgende Code Beispiel zeigt auf, wie eine solche Abfrage erstellt wird. Wichtig dabei ist, dasa man das Access Token im http Header mitliefert, da ansonsten der Zugriff auf das API verweigert wird.

Resultat am Beispiel der Windows Phone App:

Testen der App
Für Windows Phone und Android werden Simulatoren mitgeliefert, um die App zu testen. Für iOS ist die ganze Sache etwas komplizierter: Es muss im Netz ein Mac Book zur Verfügung gestellt und darauf Xamarin und XCode installiert werden. Sobald dies erfolgt ist, kann man sich im Visual Studio mit dem Agenten verbinden. Mit dem Start des Debuggers wird auf dem Mac Book auch der Simulator gestartet und die App kann getestet werden. Xamarin bietet zusätzlich einen Test Cloud Service an, wo die App auf diversen Endgeräten getestet werden kann. Diese ist allerdings immer noch kostenpflichtig.

Fazit
Durch Xamarin ist die Entwicklung von Multi-Device Apps sehr viel einfacher geworden. Innert kurzer Zeit kann auf allen Plattformen ein sehr gutes Resultat erzielt werden. Der Schachzug von Microsoft Xamarin zu kaufen, war klug. Will man die plattformspezifischen Stärken nutzen, muss mehr Zeit aufgewendet werden. Was das Office 365 API anbelangt, ist die grösste Herausforderung die Authentifizierung. Mit Hilfe der ADAL Library und dem Studium des Ablaufs ist diese Hürde jedoch nach kurzer Zeit überwunden. Die Schnittstellen sind sehr gut dokumentiert, was das Beziehen der Daten sehr einfach und gut verständlich macht. Wenn man seine SharePoint Daten mobil nutzen möchte, ist die Kombination einer App und dem Office 365 API eine gute Lösung dem Arbeiten von Unterwegs nichts mehr im Wege.