Verwalten von Berechtigungen, iOS

Bei der Standardanmeldung erhält deine App Zugriff auf das öffentliche Profil einer Person. Damit du weitere Profilinformationen erhalten oder im Namen einer anderen Person Inhalte auf Facebook posten kannst, musst du die erforderlichen Berechtigungen anfordern, siehe Berechtigungen bei Facebook Login.

Deine App sollte Berechtigungen folgendermaßen verwalten:

  • Graph API-Anfragen: Bevor du Graph API-Anfragen sendest, solltest du die erforderlichen Berechtigungen prüfen und sie, falls erforderlich, anfordern.

  • Fehlende und widerrufene Berechtigung: Deine App muss bei Fehlern wegen fehlender oder widerrufener Berechtigungen von Facebook die Berechtigungen anfordern bzw. den Vorgang erneut durchführen. Weitere Informationen findest du unter Fehlerbehandlung, iOS-SDK.

  • Timing-Anfragen: Du kannst die Conversion steigern, wenn du nur dann nach Berechtigungen fragst, wenn sie benötigt werden, und Funktionalität bereitstellst, ohne alle Berechtigungen zu verlangen.

Anfrage bei der Anmeldung

Um bei der Anmeldung mit FBSDKLoginButtonnach Berechtigungen zu fragen, lege die Eigenschaft permissions fest:

let loginButton = FBLoginButton()
loginButton.permissions = ["public_profile", "email"]

Wenn du anstatt FBSDKLoginButtoneinen benutzerdefinierten Login-Button verwendest, kannst du einen LoginManager nutzen, um den Login durchzuführen:

override func viewDidLoad() {
    super.viewDidLoad()

    ...
    loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside)  
}
  
@objc func loginButtonClicked() {
    let loginManager = LoginManager()
    loginManager.logIn(permissions: ["email"], from: self) { result, error in
        // Process result or error
    }
}

Prüfe, ob ein Schlüssel verfügbar ist, bevor du denloginManageraufrufst. Siehe Facebook Login für iOS

Berechtigungen prüfen

Um aktuelle Berechtigungen zu prüfen, überprüfe den FBSDKAccessTokenerforderlich.

if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"email"]) {
  // TODO: publish content.
} else {
  FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
  [loginManager logInWithPublishPermissions:@[@"email"]
                         fromViewController:self
                                    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    //TODO: process error or result.
  }];
}

Verweigerte Berechtigungen

Überprüfe das FBSDKLoginResult , das an den FBSDKLoginManager -Rückruf oder den FBSDKLoginButton -Delegate zurückgegeben wurde, um zu sehen, ob jemand eine Berechtigungsanfrage abgelehnt hat:

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithPublishPermissions:@[@"email"]
                       fromViewController:self
                                  handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
 if ([result.declinedPermissions containsObject:@”email”]) {
   // TODO: do not request permissions again immediately. Consider providing a NUX 
  // describing  why the app want this permission.
 } else {
 // ...
 }
}];

Fehlende Berechtigungen

Wenn du Graph API-Anfragen durchführst, kannst du das NSError -Objekt prüfen, um zu sehen, ob Berechtigungsfehler vorliegen:

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/feed"
                                   parameters:@{ @"message" : @"This is a status update" }
                                   HTTPMethod:@"POST"]
  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    if ([error.userInfo[FBSDKGraphRequestErrorGraphErrorCode] isEqual:@200]) {
      NSLog(@"permission error");
    }
}];

Weitere Informationen findest du unter Fehlerbehandlung, iOS SDK.

Weitere Berechtigungen anfordern

Verwende FBSDKLoginManager , um zusätzliche Berechtigungen anzufordern, oder fordere zuvor verweigerte Berechtigungen mit den logInWith*: -Methoden an. FBSDKLoginManager erkennt anhand der Verfügbarkeit von [FBSDKAccessToken currentAcccessToken]erforderlich.

Berechtigungen widerrufen

Du kannst es Benutzern ermöglichen, bestimmte Berechtigungen zu entfernen oder zu widerrufen, die deiner App zuvor gewährt wurden. So kann deine App z. B. eine Einstellungsseite aufweisen, auf der bestimmte Features deaktiviert werden können.

Widerrufe Berechtigungen, indem du einen Aufruf des Graph API-Endpunktes startest.

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email"
       parameters:nil
       HTTPMethod:@"DELETE"]
  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
  // ...
}];

Anmeldung widerrufen

Du kannst alle Rechte für eine App widerrufen, indem du einen Graph API-Aufruf durchführst, mit dem alle Berechtigungen gelöscht werden. Verwende den Code in Berechtigungen widerrufen und ändere den Pfad der Anfrage in /me/permissionserforderlich.


Berechtigungen über Graph API Explorer widerrufen

Zu Testzwecken möchtest du vielleicht Berechtigungen widerrufen, ohne deine App zu verwenden. Dazu kannst du den Graph API Explorer verwenden.

  1. Rufe den Graph API Explorer auf.
  2. Wähle deine App aus.
  3. Klicke auf Get Token > Get Access Tokenerforderlich.
  4. Klicke auf Clear , um die Berechtigungen der ausgewählten App aufzuheben.

So kannst du eine einzelne Berechtigung widerrufen:

  1. Lege das Pfadeingabefeld auf /me/permissions/{permission-name} fest und verwende dabei für {permission-name}die Berechtigung, die entfernt werden soll, z. B. emailerforderlich.
  2. Wechsle von GET zu DELETEerforderlich.
  3. Klicke auf den Button Submit .
Graph API Explorer