Administrar permisos en iOS

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

La aplicación debería administrar los permisos de este modo:

  • Solicitudes de API Graph: antes de enviar solicitudes de API Graph debes comprobar si tienes los permisos necesarios o, en caso contrario, solicitarlos.

  • Permisos faltantes y permisos revocados: tu aplicación debe resolver cualquier error de Facebook generado por la falta o revocación de algún permiso; por ejemplo, podría volver a solicitarlos y reintentar el proceso. Consulta Administrar errores del SDK para iOS.

  • Programación oportuna de solicitudes: lograrás más conversiones si solicitas permisos solo cuando es necesario y ofreces el acceso a las funciones de la aplicación sin requerir todos los permisos.

Solicitudes 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 usas un botón de inicio de sesión personalizado en lugar de FBSDKLoginButton, puedes usar un LoginManager para 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
    }
}

Comprueba la disponibilidad de cualquier token existente antes de llamar a loginManager. Consulta Inicio de sesión con Facebook para iOS.

Comprobar permisos

Para comprobar los permisos actuales, inspecciona 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 FBSDKLoginResult devuelto a la devolución de llamada FBSDKLoginManager o al delegado FBSDKLoginButton para ver si alguien rechazó 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 faltantes

Cuando realizas solicitudes de API Graph, puedes comprobar 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 Administrar errores del SDK para iOS.

Solicitar más permisos

Usa FBSDKLoginManager para solicitar permisos adicionales o permisos rechazados anteriormente con los métodos logInWith*:. El código FBSDKLoginManager verá que se trata de una solicitud repetida por la disponibilidad de [FBSDKAccessToken currentAcccessToken].

Revocar permisos

Puedes activar la opción de revocar permisos específicos concedidos previamente a la aplicación. Por ejemplo, en la aplicación podría haber una página de configuración en la que se puedan desactivar determinadas funciones.

Los permisos se revocan realizando una llamada a un extremo de API Graph.

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

Revocar el inicio de sesión

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


Revocar permisos mediante el explorador de la API Graph

Para fines de prueba, puedes cancelar la autorización para revocar permisos sin utilizar la aplicación. Para ello, usa el explorador de la API Graph.

  1. Accede al explorador de la API Graph.
  2. Selecciona tu aplicación.
  3. Haz clic en Get Token > Get Access Token.
  4. Haz clic en Clear para cancelar la autorización a la aplicación seleccionada.

Para revocar un solo permiso:

  1. Establece el campo de entrada para la ruta como /me/permissions/{permission-name}, utilizando el permiso que quieres quitar para {permission-name}, por ejemplo, publish_actions.
  2. Cambia de GET a DELETE.
  3. Toca el botón Submit.
Explorador de la API Graph