Durante o login básico, seu aplicativo recebe acesso ao perfil público de uma pessoa. Para acessar outras informações do perfil ou publicar conteúdo no Facebook em nome dessa pessoa, é necessário solicitar permissões adicionais. Consulte Permissões com o Login do Facebook.
O aplicativo deve gerenciar permissões da seguinte maneira:
Solicitações da Graph API – antes de enviar solicitações da Graph API, verifique as permissões necessárias e as solicite, se necessário.
Permissões ausentes e revogadas – seu aplicativo precisa solicitar permissões e tentar novamente para corrigir erros de permissões ausentes ou revogadas do Facebook. Consulte Tratamento de erros do SDK para iOS.
Solicitações oportunas – a qualidade da conversão será melhor se você solicitar permissões somente quando necessário e fornecer funcionalidades que não precisem de todas as permissões.
Para solicitar permissões no login com FBSDKLoginButton
, defina a propriedade permissions
:
let loginButton = FBLoginButton() loginButton.permissions = ["public_profile", "email"]
Caso você esteja usando um botão Entrar personalizado em vez de FBSDKLoginButton
, será possível aplicar um LoginManager
para fazer o login:
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 } }
É necessário verificar a disponibilidade de um token existente antes de fazer uma chamada para o loginManager
. Consulte Login do Facebook para iOS.
Para verificar as permissões atuais, inspecione o 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. }]; }
Inspecione o FBSDKLoginResult
exibido para o retorno de chamada de FBSDKLoginManager
ou do delegado de FBSDKLoginButton
para ver se alguém recusou uma solicitação de permissões:
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 { // ... } }];
Ao fazer solicitações da Graph API, é possível verificar o objeto NSError
para conferir se há erros de permissão:
[[[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 saber mais, consulte Tratamento de erros do SDK para iOS.
Use FBSDKLoginManager
para solicitar permissões adicionais ou recusadas anteriormente com os métodos logInWith*:
. FBSDKLoginManager
reconhecerá a solicitação repetida por meio da disponibilidade de [FBSDKAccessToken currentAcccessToken]
.
É possível ativar a remoção ou a revogação de permissões específicas concedidas anteriormente ao aplicativo. Por exemplo, seu aplicativo pode ter uma página de configuração que permite a desativação de determinados recursos.
Faça uma chamada a um ponto de extremidade da Graph API para revogar permissões.
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email" parameters:nil HTTPMethod:@"DELETE"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // ... }];
Para revogar todos os privilégios de um app, faça uma chamada da Graph API que exclui todas as permissões. Use o código encontrado em Revogar permissões e altere o caminho da solicitação para /me/permissions
.
Para fins de teste, talvez seja necessário desautorizar as permissões revogadas sem usar seu aplicativo. Você pode usar o Explorador da Graph API para fazer isso.
Obter token
> Obter token de acesso
.Limpar
para cancelar a autorização do app selecionado.Para revogar somente uma permissão, faça o seguinte:
/me/permissions/{permission-name}
. Substitua {permission-name}
pela permissão que você quer remover, por exemplo, email
.GET
para DELETE
.Enviar
.