Durante l'accesso di base, la tua app ottiene l'accesso al profilo pubblico di un utente. Per accedere alle informazioni del profilo aggiuntive o pubblicare contenuti su Facebook per conto dell'utente, devi richiedere ulteriori autorizzazioni. Fai riferimento alle autorizzazioni con Facebook Login.
La tua app deve gestire le autorizzazioni come segue:
Richieste API Graph: prima di inviare richieste all'API Graph, devi verificare di avere le autorizzazioni necessarie o, in caso contrario, richiederle.
Autorizzazioni mancanti o revocate: la tua app deve gestire i messaggi di errore di Facebook in caso di autorizzazioni mancanti o revocate, richiedendole ed effettuando altri tentativi. Consulta Gestione degli errori, SDK per iOS.
Tempistica delle richieste: otterrai una conversione migliore se chiedi le autorizzazioni solo quando sono necessarie e fornisci la funzionalità senza richiedere tutte le autorizzazioni.
Per chiedere le autorizzazioni all'accesso con FBSDKLoginButton
, imposta la proprietà permissions
:
let loginButton = FBLoginButton() loginButton.permissions = ["public_profile", "email"]
Se utilizzi un pulsante di accesso personalizzato invece di FBSDKLoginButton
, puoi utilizzare LoginManager
per eseguire l'accesso:
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 } }
Prima di chiamare loginManager
, verifica la disponibilità di un token esistente. Consulta Facebook Login per iOS.
Per verificare le autorizzazioni correnti, esamina FBSDKAccessToken
.
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. }]; }
Per controllare se qualcuno ha rifiutato una richiesta di autorizzazioni, esamina il FBSDKLoginResult
restituito alla callback FBSDKLoginManager
o al delegato FBSDKLoginButton
:
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 { // ... } }];
Quando effettui richieste all'API Graph, puoi controllare l'oggetto NSError
per scoprire se si sono verificati errori nelle autorizzazioni:
[[[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"); } }];
Per ulteriori informazioni, consulta Gestione degli errori, SDK per iOS.
Usa FBSDKLoginManager
per richiedere autorizzazioni aggiuntive oppure richiedi le autorizzazioni negate in precedenza usando i metodi logInWith*:
. FBSDKLoginManager
individuerà se si tratta di un'ulteriore richiesta dalla disponibilità di [FBSDKAccessToken currentAcccessToken]
.
Puoi consentire a qualcuno di rimuovere o revocare determinate autorizzazioni concesse in precedenza alla tua app. Ad esempio, la tua app può avere una pagina delle impostazioni dove è possibile disabilitare funzioni specifiche.
Per revocare le autorizzazioni effettua una chiamata a un endpoint dell'API Graph.
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email" parameters:nil HTTPMethod:@"DELETE"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // ... }];
Puoi revocare tutti i privilegi di un'app effettuando una chiamata API Graph per eliminare tutte le autorizzazioni. Usa il codice in Revoca delle autorizzazioni e modifica il percorso della richiesta su /me/permissions
.
Durante i test puoi disabilitare la revoca delle autorizzazioni senza usare la tua app. Per farlo, puoi usare il Tool di esplorazione per la API Graph.
Get Token
> Get Access Token
.Clear
per disabilitare l'app selezionata.Per revocare una singola autorizzazione:
/me/permissions/{permission-name}
usando l'autorizzazione che desideri rimuovere per {permission-name}
, ad esempio publish_actions
.GET
a DELETE
.Submit
.