Erste Schritte mit Microsoft Graph in einer IOS-App

Sie erstellen Apps für Unternehmenskunden? Ihre App funktioniert möglicherweise nicht, wenn Ihr Unternehmenskunde Enterprise Mobility-Sicherheitsfunktionen wie bedingten Gerätezugriff aktiviert. In diesem Fall treten bei Ihren Kunden möglicherweise Fehler auf.

Zur Unterstützung aller Unternehmenskunden über alle Unternehmensszenarien hinweg müssen Sie den Azure AD-Endpunkt verwenden und Ihr Apps mithilfe des Azure-Verwaltungsportals verwalten. Weitere Informationen finden Sie in dem Artikel zum Thema Entscheidung zwischen dem Azure AD- und dem Azure AD v2.0-Endpunkt.

Dieser Artikel beschreibt die erforderlichen Aufgaben zum Abrufen eines Zugriffstokens vom Azure AD v2.0-Endpunkt und zum Aufrufen von Microsoft Graph. Er führt Sie durch den Code im Office 365 Connect-Beispiel für iOS (SDK) und erläutert die wichtigsten Konzepte, die in einer App implementiert werden müssen, die Microsoft Graph verwendet. In diesem Artikel wird auch beschrieben, wie Sie mithilfe des Microsoft Graph SDK für iOS auf Microsoft Graph zugreifen.

Sie können die Version der App, die Sie erstellen, aus diesem GitHub Repository herunterladen:

In der folgenden Abbildung ist die App dargestellt, die Sie erstellen.

Die exemplarische Vorgehensweise im Connect-Beispiel zeigt die Herstellung einer Verbindung und das Senden einer E-Mail in der App.

Der Workflow beinhaltet das Herstellen einer Verbindung zu Microsoft Graph sowie die Authentifizierung, das Anmelden mit Ihrem Büro- oder persönlichen Konto und schließlich das Senden einer E-Mail an einen Empfänger.

Sie möchten keine App erstellen? Verwenden Sie für einen schnellen Einstieg den Schnellstart Microsoft Graph.

Voraussetzungen

Für die ersten Schritte benötigen Sie:

  • Xcode von Apple
  • Installation von CocoaPods als ein Abhängigkeits-Manager.
  • Ein Microsoft-Konto oder ein Geschäfts- oder Schulkonto
  • Das Microsoft Graph Startprojekt für iOS. Diese Vorlage enthält Klassen, denen Sie Code hinzufügen müssen. Sie rufen dieses Projekt ab, indem Sie das Beispielprojekt von diesem Speicherort aus klonen oder herunterladen. Dann arbeiten Sie mit dem Arbeitsbereich innerhalb des Ordners Startprojekt (O365-iOS-Microsoft-Graph-SDK.xcworkspace).

Registrieren der App

  1. Melden Sie sich beim App-Registrierungsportal entweder mit Ihrem persönlichen oder geschäftlichen Konto oder mit Ihrem Schulkonto an.
  2. Klicken Sie auf App hinzufügen.
  3. Geben Sie einen Namen für die App ein, und wählen Sie Anwendung erstellen aus.

    Die Registrierungsseite wird angezeigt, und die Eigenschaften der App werden aufgeführt.

  4. Wählen Sie unter Plattformen die Option Plattform hinzufügen aus.

  5. Wählen Sie Systemeigene Anwendung.
  6. Kopieren Sie die Client-ID in die Zwischenablage. Sie müssen diesen Wert in die Beispiel-App eingeben.

    Die App-ID ist ein eindeutiger Bezeichner für Ihre App.

  7. Klicken Sie auf Speichern.

Importieren der Projekt-Abhängigkeiten

  1. Klonen Sie dieses Repository, Office 365 Connect-Beispiel für iOS unter Verwendung des Microsoft Graph-SDKs. Denken Sie daran, dass Sie das Beispiel im Startprojekt-Ordner und nicht im Beispiel auf der Stammebene des Projekts verwenden.
  2. Verwenden Sie CocoaPods, um das Microsoft Graph-SDK und Authentifizierungsabhängigkeiten zu importieren: Diese Beispiel-App enthält bereits eine POD-Datei, die die Pods in das Projekt überträgt. Navigieren Sie zu dem Ordner Startprojekt in der Terminal -App und führen Sie von Terminal folgenden Befehl aus:

    pod install
    

Sie erhalten eine Bestätigung, dass die Pods in das Projekt importiert wurden. Weitere Informationen finden Sie unter CocoaPods

Aktivieren der Schlüsselbundfreigabe

Für Xcode 8 müssen Sie die Schlüsselbundgruppe hinzufügen, sonst kann Ihre App nicht auf den Schlüsselbund zugreifen. So fügen Sie die Schlüsselbundgruppe hinzu:

  1. Wählen Sie im Projekt-Manager-Bereich in Xcode das Projekt aus. (⌘ + 1).

  2. Wählen Sie Office 365-iOS-Microsoft-Graph-SDK.

  3. Aktivieren Sie auf der Registerkarte „Funktionen“ die Option Schlüsselbundfreigabe.

  4. Fügen Sie com.microsoft.O365-iOS-Microsoft-Graph-SDK zu den Schlüsselbundgruppen hinzu.

Authentifizieren mit Microsoft Graph

Für den Zugriff auf den Benutzeroberflächenworkflow muss die App den Benutzer authentifizieren, sodass dieser dann eine E-Mail an einen bestimmten Benutzer senden kann. Für Anforderungen beim Microsoft Graph-Dienst muss ein Authentifizierungsanbieter bereitgestellt werden, der HTTPS-Anforderungen mit einem entsprechenden OAuth 2.0-Bearertoken authentifizieren kann. Im Beispielprojekt liegt eine Authentifizierungsklasse mit der Bezeichnung AuthenticationProvider.m. bereits als Stub vor. Wir fügen eine Funktion zum Anfordern und Erwerben eines Zugriffstokens für den Aufruf der Microsoft Graph-API hinzu.

  1. Öffnen Sie den Projektarbeitsbereich Xcode (O365-iOS-Microsoft-Graph-SDK.xcworkspace) im Ordner Startprojekt und navigieren Sie zum Ordner Authentifizierung und öffnen Sie die Datei AuthenticationProvider.m. Fügen Sie dieser Klasse den folgenden Code hinzu.

    -(void) connectToGraphWithClientId:(NSString *)clientId scopes:(NSArray *)scopes completion:(void (^)    (NSError *))completion{
        [NXOAuth2AuthenticationProvider setClientId:kClientId
                                          scopes:scopes];
    
    
        /**
         Obtains access token by performing login with UI, where viewController specifies the parent view controller.
         @param viewController The view controller to present the UI on.
         @param completionHandler The completion handler to be called when the authentication has completed.
         error should be non nil if there was no error, and should contain any error(s) that occurred.
         */
    
            if ([[NXOAuth2AuthenticationProvider sharedAuthProvider] loginSilent]) {
            completion(nil);
            }
            else {
                [[NXOAuth2AuthenticationProvider sharedAuthProvider] loginWithViewController:nil completion:^(NSError *error) {
                if (!error) {
                NSLog(@"Authentication successful.");
                completion(nil);
                }
                else {
                    NSLog(@"Authentication failed - %@", error.localizedDescription);
                completion(error);
                }
                }];
        }
    
    }
    
  2. Als Nächstes fügen Sie die Methode in der Header-Datei hinzu. Öffnen Sie die Datei AuthenticationProvider.h und fügen Sie dieser Klasse den folgenden Code hinzu.

    -(void) connectToGraphWithClientId:(NSString *)clientId
                        scopes:(NSArray *)scopes
                    completion:(void (^)(NSError *error))completion;
    
  3. Abschließend rufen wir diese Methode aus ConnectViewController.m heraus auf. Dieser Controller ist die Standardansicht, die die App lädt, und es gibt eine einzelne Schaltfläche mit dem Namen Verbinden, die der Benutzer antippt, um den Authentifizierungsprozess zu initiieren. Diese Methode beinhaltet zwei Parameter, die Client-ID und Bereiche, die wir nachfolgend im Detail besprechen. Fügen Sie die folgende Aktion zu ConnectViewController.m hinzu.

    - (IBAction)connectTapped:(id)sender {
        [self showLoadingUI:YES];   
        NSArray *scopes = [kScopes componentsSeparatedByString:@","];
        [self.authProvider connectToGraphWithClientId:kClientId scopes:scopes completion:^(NSError *error) {
            if (!error) {
                [self performSegueWithIdentifier:@"showSendMail" sender:nil];
                [self showLoadingUI:NO];
                NSLog(@"Authentication successful.");
                }
            else{
                NSLog(NSLocalizedString(@"CHECK_LOG_ERROR", error.localizedDescription));
                [self showLoadingUI:NO];
                };
            }];
    }
    

Senden einer E-Mail mit Microsoft Graph

Nach dem Konfigurieren des Projekts für die Authentifizierung wird in den nächsten Aufgaben mithilfe der Microsoft Graph-API eine E-Mail an einen Benutzer gesendet. Standardmäßig ist der angemeldete Benutzer der Empfänger, aber Sie haben die Möglichkeit, einen beliebigen anderen Empfänger anzugeben. Der Code, mit dem wir hier arbeiten, befindet sich im Ordner Controller und in der Klasse SendMailViewController.m. Sie werden sehen, dass es hier noch anderen Code für die Benutzeroberfläche und eine Hilfsmethode zum Abrufen von Benutzerprofildaten aus dem Microsoft Graph-Dienst gibt. Wir werden uns auf die Methoden zum Erstellen einer E-Mail-Nachricht und das Senden dieser Nachricht konzentrieren.

  1. Öffnen Sie SendMailViewController.m. im Ordner „Controller“ und fügen Sie die folgende Hilfsmethode zu der Klasse hinzu:

    // Create a sample test message to send to specified user account
    -(MSGraphMessage*) getSampleMessage{
        MSGraphMessage *message = [[MSGraphMessage alloc]init];
        MSGraphRecipient *toRecipient = [[MSGraphRecipient alloc]init];
        MSGraphEmailAddress *email = [[MSGraphEmailAddress alloc]init];
    
        email.address = self.emailAddress;
        toRecipient.emailAddress = email;
    
        NSMutableArray *toRecipients = [[NSMutableArray alloc]init];
        [toRecipients addObject:toRecipient];
    
        message.subject = NSLocalizedString(@"MAIL_SUBJECT", comment: "");
    
        MSGraphItemBody *emailBody = [[MSGraphItemBody alloc]init];
        NSString *htmlContentPath = [[NSBundle mainBundle] pathForResource:@"EmailBody" ofType:@"html"];
        NSString *htmlContentString = [NSString stringWithContentsOfFile:htmlContentPath encoding:NSUTF8StringEncoding error:nil];
    
        emailBody.content = htmlContentString;
        emailBody.contentType = [MSGraphBodyType html];
        message.body = emailBody;
    
        message.toRecipients = toRecipients;
    
        return message;
    
    }
    
  2. Öffnen Sie SendMailViewController.m. Fügen Sie die folgende Methode für das Senden von E-Mails zu der Klasse hinzu.

    //Send mail to the specified user in the email text field
    -(void) sendMail {   
        MSGraphMessage *message = [self getSampleMessage];
        MSGraphUserSendMailRequestBuilder *requestBuilder = [[self.graphClient me]sendMailWithMessage:message saveToSentItems:true];
        NSLog(@"%@", requestBuilder);
        MSGraphUserSendMailRequest *mailRequest = [requestBuilder request];
        [mailRequest executeWithCompletion:^(NSDictionary *response, NSError *error) {
            if(!error){
                NSLog(@"response %@", response);
                NSLog(NSLocalizedString(@"ERROR", ""), error.localizedDescription);
    
                dispatch_async(dispatch_get_main_queue(), ^{
                    self.statusTextView.text = NSLocalizedString(@"SEND_SUCCESS", comment: "");
            });
        }
        else {
            NSLog(NSLocalizedString(@"ERROR", ""), error.localizedDescription);
                self.statusTextView.text = NSLocalizedString(@"SEND_FAILURE", comment: "");
            }
        }];
    
    }
    

GetSampleMessage erstellt einen Entwurf einer HTML-Beispiel-E-Mail für Demozwecke. Die nächste Methode, SendMail, nimmt die Nachricht auf und führt die Anforderung zum Senden der Nachricht aus. Der Standardempfänger ist auch hier der angemeldete Benutzer.

Ausführen der App

  1. Vor dem Ausführen des Beispiels müssen Sie die Client-ID angeben, die Sie bei dem Registrierungsvorgang im Abschnitt Registrieren der App erhalten haben. Öffnen Sie AuthenticationConstants.m unter dem Ordner Anwendung. Sie werden sehen, dass die ClientID aus dem Registrierungsprozess am Anfang der Datei hinzugefügt werden kann:

    // You will set your application's clientId
    NSString * const kClientId    = @"ENTER_CLIENT_ID_HERE";
    NSString * const kScopes = @"https://graph.microsoft.com/Mail.Send, https://graph.microsoft.com/User.Read, offline_access";
    

    Hinweis: Sie sehen, dass die folgenden Berechtigungsbereiche für dieses Projekt konfiguriert wurden: "https://graph.microsoft.com/Mail.Send", "https://graph.microsoft.com/User.Read", "Offline_access". Die in diesem Projekt verwendeten Dienstaufrufe, also das Senden einer E-Mail an Ihr E-Mail-Konto und das Abrufen einiger Profilinformationen (Anzeigename, E-Mail-Adresse), benötigen diese Berechtigungen, damit die App ordnungsgemäß ausgeführt wird.

  2. Führen Sie das Beispiel aus, tippen Sie auf Verbinden, melden Sie sich mit Ihrem persönlichen Konto oder mit Ihrem Geschäfts- oder Schulkonto an und gewähren Sie die erforderlichen Berechtigungen.

  3. Klicken Sie auf die Schaltfläche E-Mail senden. Nachdem die E-Mail gesendet wurde, wird unter der Schaltfläche eine Erfolgsmeldung angezeigt.

Nächste Schritte

Siehe auch