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.
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.
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. }]; }
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 { // ... } }];
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.
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]
.
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) { // ... }];
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
.
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.
Obtener identificador
> Obtener identificador de acceso
.Borrar
para desautorizar la aplicación seleccionada.Para revocar un solo permiso:
/me/permissions/{permission-name}
mientras utilizas el permiso que quieres eliminar de {permission-name}
; por ejemplo, email
.GET
a DELETE
.Enviar
.