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.
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.
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. }]; }
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 { // ... } }];
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.
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]
.
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) { // ... }];
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
.
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.
Get Token
> Get Access Token
.Clear
para cancelar la autorización a la aplicación seleccionada.Para revocar un solo permiso:
/me/permissions/{permission-name}
, utilizando el permiso que quieres quitar para {permission-name}
, por ejemplo, publish_actions
.GET
a DELETE
.Submit
.