Administración de permisos para iOS

Durante el inicio de sesión básico, la aplicación recibe acceso al perfil público de un usuario. Para acceder a información adicional del perfil o publicar contenido en Facebook en nombre de un usuario, debes solicitar permisos adicionales. Consulta Permisos con el inicio de sesión con Facebook.

La aplicación debe administrar los permisos de la siguiente manera:

  • Solicitudes de la API Graph: antes de enviar solicitudes de la API Graph, debes comprobar si dispones de los permisos necesarios y solicitarlos, según proceda.

  • Permisos que faltan o se han revocado: para resolver los errores de permisos que faltan o se han revocado de Facebook, la aplicación debe solicitarlos y volver a intentarlo. Consulta Gestión de errores, SDK para iOS.

  • Solicitudes oportunas: obtendrás una mejor conversión si solicitas permisos solo cuando sean necesarios y proporcionas funciones sin requerir todos los permisos.

Solicitud en el inicio de sesión

Para solicitar permisos en el inicio de sesión con FBSDKLoginButton, establece la propiedad permissions :

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

Si utilizas un botón "Iniciar sesión" personalizado en lugar de FBSDKLoginButton, puedes usar LoginManager para llevar a cabo el inicio de sesión:

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

Debes comprobar la disponibilidad de un identificador existente antes de llamar a loginManager. Consulta Inicio de sesión con Facebook para iOS.

Consulta de permisos

Para consultar los permisos actuales, inspecciona el identificador 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.
  }];
}

Permisos rechazados

Inspecciona el controlador FBSDKLoginResult devuelto a la devolución de llamada FBSDKLoginManager o al delegado FBSDKLoginButton para ver si alguien ha rechazado una solicitud de permisos:

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

Permisos que faltan

Cuando realizas solicitudes a la API Graph, puedes consultar el objeto NSError para ver si existen errores de permisos:

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

Para obtener más información, consulta Gestión de errores, SDK para iOS.

Solicitud de permisos adicionales

Utiliza FBSDKLoginManager para solicitar permisos adicionales o solicitar permisos rechazados anteriormente con los métodos logInWith*: . FBSDKLoginManager detectará que se trata de una nueva solicitud por la disponibilidad de [FBSDKAccessToken currentAcccessToken].

Revocación de permisos

Puedes permitir que alguien elimine o revoque permisos específicos que se han concedido anteriormente a la aplicación. Por ejemplo, la aplicación puede tener una página de configuración donde los usuarios pueden desactivar funciones específicas.

Para revocar permisos, realiza una llamada a un extremo de la API Graph.

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

Revocación del inicio de sesión

Puedes revocar todos los privilegios de una aplicación mediante una llamada a la API Graph que elimine todos los permisos. Utiliza el código de Revocación de permisos y cambia la ruta de la solicitud a /me/permissions.


Revocación de permisos mediante el explorador de la API Graph

Con fines de prueba, puedes desautorizar la revocación de permisos sin utilizar la aplicación. Para ello, puedes utilizar el explorador de la API Graph.

  1. Accede al explorador de la API Graph.
  2. Selecciona la aplicación.
  3. Haz clic en Obtener identificador > Obtener identificador de acceso.
  4. Haz clic en Borrar para desautorizar la aplicación seleccionada.

Para revocar un solo permiso:

  1. Establece el campo de entrada de la ruta en /me/permissions/{permission-name} mientras utilizas el permiso que quieres eliminar de {permission-name}; por ejemplo, email.
  2. Cambia de GET a DELETE.
  3. Pulsa el botón Enviar .
Explorador de la API Graph