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.
Um bei der Anmeldung mit FBSDKLoginButton
nach Berechtigungen zu fragen, lege die Eigenschaft permissions
fest:
let loginButton = FBLoginButton() loginButton.permissions = ["public_profile", "email"]
Wenn du anstatt FBSDKLoginButton
einen 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 denloginManager
aufrufst. Siehe Facebook Login für iOS
Um aktuelle Berechtigungen zu prüfen, überprüfe den FBSDKAccessToken
erforderlich.
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. }]; }
Ü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 { // ... } }];
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.
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.
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) { // ... }];
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/permissions
erforderlich.
Zu Testzwecken möchtest du vielleicht Berechtigungen widerrufen, ohne deine App zu verwenden. Dazu kannst du den Graph API Explorer verwenden.
Get Token
> Get Access Token
erforderlich.Clear
, um die Berechtigungen der ausgewählten App aufzuheben.So kannst du eine einzelne Berechtigung widerrufen:
/me/permissions/{permission-name}
fest und verwende dabei für {permission-name}
die Berechtigung, die entfernt werden soll, z. B. email
erforderlich.GET
zu DELETE
erforderlich.Submit
.