Gestione delle autorizzazioni su iOS

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.

Richiesta all'accesso

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.

Verifica delle autorizzazioni

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.
  }];
}

Autorizzazioni rifiutate

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 {
 // ...
 }
}];

Autorizzazioni mancanti

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.

Richiesta di altre autorizzazioni

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].

Revoca delle autorizzazioni

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) {
  // ...
}];

Revoca dell'accesso

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.


Revoca delle autorizzazioni tramite il tool di esplorazione per la API Graph

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.

  1. Accedi al Tool di esplorazione per la API Graph.
  2. Seleziona la tua app.
  3. Clicca su Get Token > Get Access Token.
  4. Clicca su Clear per disabilitare l'app selezionata.

Per revocare una singola autorizzazione:

  1. Imposta il campo del percorso su /me/permissions/{permission-name} usando l'autorizzazione che desideri rimuovere per {permission-name}, ad esempio publish_actions.
  2. Modifica da GET a DELETE.
  3. Premi il pulsante Submit.
Tool di esplorazione per la API Graph