Análise de login

Se solicitar mais do que public_profile e email, o seu aplicativo precisa ser analisado pelo Facebook antes de ser lançado. Saiba mais sobre o processo de análise e o que é necessário para que o aplicativo seja aprovado.

Guia de análise de login

Botão Entrar personalizado

Em vez de usar o botão Entrar com a marca do Facebook (mais detalhes em Login no Facebook para iOS – Início rápido), você pode personalizar o layout e o comportamento. No exemplo de código a seguir, invocamos o diálogo Entrar usando a classe de gerenciador de login (LoginManager) e um botão personalizado (UIButton). É possível usar qualquer interface do usuário personalizada ou manipulação de eventos para invocar o diálogo Entrar.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // Add a custom login button to your app
        let loginButton = UIButton(type: .custom)
        loginButton.backgroundColor = .darkGray
        loginButton.frame = CGRect(x: 0, y: 0, width: 180, height: 40)
        loginButton.center = view.center
        loginButton.setTitle("My Login Button", for: .normal)

        // Handle clicks on the button
        loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside)

        view.addSubview(loginButton)
    }
  
  
    // Once the button is clicked, show the login dialog
    func loginButtonClicked() {
        let loginManager = LoginManager()
        loginManager.logIn(permissions: ["public_profile"], from: self) { result, error in
            if let error = error {
                print("Encountered Erorr: \(error)")
            } else if let result = result, result.isCancelled {
                print("Cancelled")
            } else {
                print("Logged In")
            }
        }
    }
}

    

Como usar o Interface Builder

As etapas a seguir são obrigatórias para a versão 12.0.0 e posteriores do SDK do Facebook para iOS. Se essa etapa não for concluída, isso poderá causar uma falha nos aplicativos que usarem o Interface Builder.

Para adicionar visualmente o botão Entrar no Interface Builder, faça o seguinte:

  1. Adicione um objeto UIButton ao layout. Defina limitações para posicioná-lo.
  2. Em Identity inspector, altere a propriedade Class para FBSDKLoginButton.

Seu layout ficará com a seguinte aparência:

Observação – não defina um módulo para a classe FBSDKLoginButton. A opção None (Nenhum) é exibida:

Observação – por conta de uma falha conhecida no XCFrameworks, talvez você veja este erro nos registros do Xcode:

[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.

Para corrigir o problema, adicione o código a seguir ao método application:didFinishLaunchingWithOptions: para fazer o "pré-carregamento" da classe FBSDKLoginButton antes que o storyboard seja carregado.

// For Swift
_ = FBLoginButton.self

// For Objective-C
[FBSDKLoginButton class];

Tokens de acesso

Notificações

Você pode rastrear alterações de AccessToken.current com a notificação .AccessTokenDidChange em NotificationCenter. Isso permite responder a alterações no estado de login do usuário:

NotificationCenter.default.addObserver(
    forName: .AccessTokenDidChange,
    object: nil,
    queue: .main
) { notification in
    if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil {
        // Handle user change
    }
}

O SDK do iOS pode atualizar AccessToken.current ao longo do tempo, por exemplo, quando o SDK atualizar um token com uma data de validade mais distante. Por isso, verifique o dicionário userInfo na notificação de AccessTokenDidChangeUserIDKey para descobrir se o usuário mudou.

Perfis

Profile contém informações do perfil público, permitindo que você personalize o aplicativo com o nome e a foto do perfil do usuário. Use loadCurrentProfile(completion:) para carregar o perfil do usuário conectado.

Profile.loadCurrentProfile { profile, error in
    if let firstName = profile?.firstName {
        print("Hello, \(firstName)")
    }
}

Defina a propriedade enableUpdatesOnAccessTokenChange como true para carregar automaticamente o perfil em Profile.current. Isso também permite observar a notificação .ProfileDidChange para responder a alterações de perfil:

Profile.enableUpdatesOnAccessTokenChange(true)
NotificationCenter.default.addObserver(
    forName: .ProfileDidChange,
    object: nil,
    queue: .main
) { notification in
    if let currentProfile = Profile.current {
        // Update for new user profile
    }
}

Como exibir fotos de perfil

A classe FBProfilePictureView permite exibir com facilidade a foto do perfil do Facebook de uma pessoa. Basta definir a propriedade profileID na instância. Defina a propriedade como um valor de AccessToken.current.userID para exibir a foto de perfil da pessoa conectada no momento.

let profilePictureView = FBProfilePictureView()
profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
profilePictureView.profileID = AccessToken.current!.userID
view.addSubview(profilePictureView)

Como definir o tipo de autorização

O auth_type padrão dos botões Entrar do Facebook no SDK do Facebook para iOS é rerequest (ressolicitar). Para evitar a solicitação de permissões já negadas, defina auth_type como nil. Também é possível definir o tipo reauthorize (reautorizar). Com essa opção, o diálogo de reautorização de dados é exibido quando o acesso aos dados do usuário expirar.

O exemplo a seguir mostra como definir o auth_type em Swift.

let loginButton = FBLoginButton()

// Set to nil for no auth_type
button.authType = nil

// Or set to reauthorize
button.authType = .reauthorize

O exemplo a seguir mostra como definir o auth_type usando uma configuração de login com um gerenciador de login.

let config = LoginConfiguration(
    permissions: [],
    tracking: .enabled,
    messengerPageId: nil,
    authType: nil
)

let loginManager = LoginManager()
loginManager.logIn(viewController: self, configuration: config!) { loginResult in
    // Do something with loginResult
}