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.
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") } } } }
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:
UIButton
ao layout. Defina limitações para posicioná-lo.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];
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.
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 } }
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)
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 }