Como gerenciar permissões no iOS

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.

Solicitação no login

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.

Verificar permissões

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

Permissões recusadas

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

Permissões ausentes

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.

Solicitar mais permissões

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].

Revogar permissões

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

Revogar login

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.


Como revogar permissões usando o Explorador da Graph API

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.

  1. Acesse o Explorador da Graph API.
  2. Selecione o seu app.
  3. Clique em Obter token > Obter token de acesso.
  4. Clique em Limpar para cancelar a autorização do app selecionado.

Para revogar somente uma permissão, faça o seguinte:

  1. Defina o campo de entrada do caminho como /me/permissions/{permission-name} . Substitua {permission-name}pela permissão que você quer remover, por exemplo, email.
  2. Mude GET para DELETE.
  3. Clique no botão Enviar .
Explorador da Graph API