Gestion des autorisations, iOS

Au cours du processus de connexion de base, votre application se voit accorder l’accès au profil public d’un utilisateur. Si vous souhaitez accéder à d’autres informations de profil ou publier du contenu sur Facebook au nom d’un utilisateur, vous devez demander d’autres autorisations. Pour cela, consultez les Autorisations avec Facebook Login.

Votre application doit gérer les autorisations comme suit :

  • Demandes de l’API Graph : avant d’envoyer des demandes à l’API Graph, vous devez vérifier les autorisations requises et les demander le cas échéant.

  • Autorisations manquantes et retirées : votre application doit gérer les erreurs d’autorisations manquantes ou retirées provenant de Facebook en demandant des autorisations, par exemple, et en réessayant. Consultez Gestion des erreurs, SDK iOS.

  • Demandes en temps opportun : votre conversion sera optimale si vous demandez uniquement les autorisations nécessaires au moment où vous en avez besoin.

Demander des autorisations lors de la connexion

Pour demander des autorisations au moment de la connexion avec FBSDKLoginButton, définissez la propriété permissions :

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

Si vous utilisez un bouton Login personnalisé à la place de FBSDKLoginButton, vous pouvez utiliser un LoginManager pour effectuer la connexion :

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
    }
}

Vérifiez la disponibilité d’un token existant avant d’appeler loginManager. Consultez Facebook Login pour iOS

Vérifier les autorisations

Pour vérifier les autorisations actuelles, inspectez le 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.
  }];
}

Autorisations refusées

Inspectez le FBSDKLoginResult renvoyé après le rappel de FBSDKLoginManager ou la délégation de FBSDKLoginButton pour savoir si une demande d’autorisation a été refusée :

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

Autorisations manquantes

Lorsque vous envoyez des demandes à l’API Graph, vous pouvez vérifier l’objet NSError pour savoir s’il y a des erreurs liées aux autorisations :

[[[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");
    }
}];

Pour plus d’informations, consultez Gestion des erreurs, SDK iOS.

Demander d’autres autorisations

Utilisez FBSDKLoginManager pour demander d’autres autorisations ou des autorisations qui ont été refusées via les méthodes logInWith*:. FBSDKLoginManager saura qu’il s’agit d’une nouvelle demande avec la disponibilité de [FBSDKAccessToken currentAcccessToken].

Révoquer des autorisations

Vous pouvez autoriser un utilisateur à supprimer ou à révoquer des autorisations qui ont été accordées à votre application. Par exemple, votre application peut être associée à une page de paramètres permettant de désactiver certaines fonctionnalités.

Révoquez des autorisations en appelant un point de terminaison de l’API Graph.

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

Révoquer la connexion

Vous pouvez révoquer tous les droits d’une application, en appelant l’API Graph de manière à supprimer toutes les autorisations. Utilisez le code de la section Révoquer des autorisations en remplaçant le chemin de la requête par /me/permissions.


Révoquer des autorisations via l’Explorateur de l’API Graph

À des fins de test, vous pouvez souhaiter interdire ou révoquer des autorisations sans utiliser votre application. Pour ce faire, vous pouvez utiliser l’Explorateur de l’API Graph.

  1. Accédez à l’Explorateur de l’API Graph.
  2. Sélectionnez votre application.
  3. Cliquez sur Get Token > Get Access Token.
  4. Cliquez sur Clear pour interdire l’application sélectionnée.

Pour révoquer une seule autorisation :

  1. Définissez le champ de saisie du chemin sur /me/permissions/{permission-name} tout en utilisant l’autorisation que vous souhaitez supprimer pour {permission-name}, par exemple email.
  2. Passez de GET à DELETE.
  3. Cliquez sur le bouton Submit.
Explorateur de l’API Graph