Si tu aplicación pide otros permisos que no sean public_profile
o email
, Facebook debe revisarla antes de su publicación. Obtén más información acerca del proceso de revisión y los requisitos para superarlo.
En lugar de usar el botón “Iniciar sesión” de marca de Facebook (descrito en Inicio de sesión con Facebook para iOS: inicio rápido), puede que quieras crear un comportamiento y un diseño 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 gestor 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") } } } }
Es necesario seguir estos pasos para la versión 12.0.0 y posteriores del SDK de Facebook para iOS. Es posible que las aplicaciones que utilizan Interface Builder
se bloqueen si no se ha completado este paso.
Para añadir gráficamente el botón “Iniciar sesión” en Interface Builder
, debes hacer lo siguiente:
UIButton
a tu diseño. Debes limitar su posición.Identity inspector
, cambia la propiedad Class
a FBSDKLoginButton
.Ahora tu diseño tiene el aspecto siguiente:
Nota: No debes establecer ningún módulo para la clase FBSDKLoginButton
. Debería indicar None (Ninguno):
Nota: Es posible que veas el siguiente error en Xcode debido a un problema conocido con XCFrameworks:
[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.
Para solucionarlo, puedes cargar previamente la clase FBSDKLoginButton antes de que se cargue el guion gráfico. Para ello, debes añadir el siguiente fragmento de código al método application:didFinishLaunchingWithOptions:
:
// For Swift _ = FBLoginButton.self // For Objective-C [FBSDKLoginButton class];
Puedes realizar un seguimiento de los cambios realizados en el método AccessToken.current
con la notificación .AccessTokenDidChange
en NotificationCenter
. De esta forma, puedes responder a los cambios realizados en el estado del 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 el método AccessToken.current
a lo largo del tiempo como, por ejemplo, cuando el SDK actualiza un identificador con una fecha de caducidad posterior. Por tanto, deberías comprobar el diccionario userInfo
en la notificación de AccessTokenDidChangeUserIDKey
para determinar si el usuario ha cambiado.
El objeto Profile
contiene información del perfil público, de modo que puedes personalizar tu aplicación con el nombre del usuario y la foto del perfil. Puedes cargar el perfil del usuario que ha iniciado sesión mediante el parámetro loadCurrentProfile(completion:)
.
Profile.loadCurrentProfile { profile, error in if let firstName = profile?.firstName { print("Hello, \(firstName)") } }
Puedes establecer el valor de la propiedad enableUpdatesOnAccessTokenChange
en true
para cargar el perfil automáticamente en Profile.current
. De esta manera, también puedes observar la notificación .ProfileDidChange
para responder a los cambios en el 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
permite mostrar la foto del perfil de Facebook de un usuario con facilidad. Solo tienes que establecer la propiedad profileID
en la instancia. Puedes establecerla en un valor de AccessToken.current.userID
para mostrar la foto del perfil de la persona que tiene la sesión iniciada actualmente.
let profilePictureView = FBProfilePictureView() profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100) profilePictureView.profileID = AccessToken.current!.userID view.addSubview(profilePictureView)
El valor predeterminado de auth_type
para los botones de inicio de sesión con Facebook en el SDK de Facebook para iOS es “rerequest”. Si quieres evitar la solicitud de permisos que ya han sido denegados, debes establecer el valor de auth_type
en nil
. También puedes establecerlo en “reauthorize” para mostrar el cuadro de diálogo de reautorización de los datos si el acceso a los datos del usuario ha caducado.
En el siguiente ejemplo se muestra cómo establecer el valor de auth_type
en Swift.
let loginButton = FBLoginButton() // Set to nil for no auth_type button.authType = nil // Or set to reauthorize button.authType = .reauthorize
En el siguiente ejemplo se muestra cómo establecer el valor de auth_type
mediante una configuración de inicio de sesión con un administrador de inicios 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 }