Si la app solicita más que el public_profile
y el email
, Facebook debe revisarla antes de lanzarla. Obtén más información sobre el proceso de revisión y los requisitos para obtener un resultado positivo.
En vez de usar el botón "Iniciar sesión" de marca de Facebook (cómo se explica en Inicio de sesión con Facebook para iOS: Inicio rápido), es posible que prefieras crear una diseño y un comportamiento personalizados. En el siguiente ejemplo de código, invocamos el cuadro de diálogo de inicio de sesión mediante la clase de administrador de inicio de sesión (LoginManager
) y un botón personalizado (UIButton
). Puedes utilizar cualquier otra interfaz de usuario o administrador de eventos personalizados para invocar el cuadro de diálogo de inicio de sesión.
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") } } } }
Debes seguir estos pasos para la versión 12.0.0 y posteriores del SDK de Facebook para iOS. Es posible que las apps que usan Interface Builder
se bloqueen si no completaste este paso.
Para agregar el botón "Iniciar sesión" de manera gráfica en Interface Builder
:
UIButton
a tu diseño. Configura las restricciones para posicionarlo.Identity inspector
, cambia la propiedad Class
a FBSDKLoginButton
.Tu diseño tendrá este aspecto:
Nota: No configures un módulo para la clase FBSDKLoginButton
. Debe mostrar Ninguno:
Nota: Es posible que veas el siguiente error en los registros Xcode debido a un problema conocido con XCFrameworks:
[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.
Puedes solucionarlo "precargando" la clase FBSDKLoginButton antes de que se cargue el guion gráfico si agregas a tu application:didFinishLaunchingWithOptions:
lo siguiente:
// For Swift _ = FBLoginButton.self // For Objective-C [FBSDKLoginButton class];
Puedes hacer seguimiento de los cambios AccessToken.current
con la notificación .AccessTokenDidChange
en NotificationCenter
. Esto te permite responder a los cambios en el estado de inicio de sesión del usuario:
NotificationCenter.default.addObserver( forName: .AccessTokenDidChange, object: nil, queue: .main ) { notification in if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil { // Handle user change } }
El SDK para iOS puede actualizar AccessToken.current
a lo largo del tiempo si el SDK actualiza un token con una fecha de caducidad mayor. Por ese motivo, debes verificar el diccionario userInfo
en la notificación de AccessTokenDidChangeUserIDKey
con el fin de determinar si cambió el usuario.
Profile
contiene información de tu perfil público, lo que te permite personalizar tu app con el nombre y la imagen de perfil del usuario. Puedes cargar el perfil del usuario que inició sesión mediante loadCurrentProfile(completion:)
.
Profile.loadCurrentProfile { profile, error in if let firstName = profile?.firstName { print("Hello, \(firstName)") } }
Puedes configurar la propiedad enableUpdatesOnAccessTokenChange
en true
para que el perfil se cargue en Profile.current
de manera automática. También te permite observar la notificación .ProfileDidChange
para responder a los cambios 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 } }
La clase FBProfilePictureView
proporciona una forma simple de mostrar la imagen de perfil de Facebook de alguna persona. Configura simplemente la propiedad profileID
en la instancia. Puedes configurarla en un valor de AccessToken.current.userID
para mostrar la imagen de perfil de la persona cuya sesión está actualmente iniciada.
let profilePictureView = FBProfilePictureView() profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100) profilePictureView.profileID = AccessToken.current!.userID view.addSubview(profilePictureView)
Se vuelve a solicitar el auth_type
predeterminado de los botones de inicio de sesión con Facebook en el SDK de Facebook para iOS. Si deseas evitar tener que solicitar permisos que se negaron anteriormente, configura auth_type
en nil
. También puedes configurarlo para que se vuelva a autorizar que se muestre el cuadro de diálogo de reautorización de datos si caducó el acceso por parte del usuario a los datos.
El siguiente ejemplo muestra cómo configurar el auth_type
en Swift.
let loginButton = FBLoginButton() // Set to nil for no auth_type button.authType = nil // Or set to reauthorize button.authType = .reauthorize
El siguiente ejemplo muestra cómo configurar el auth_type
mediante la configuración del inicio de sesión con un administrador de inicio de sesión.
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 }