Revisión del inicio de sesión

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.

Guía de revisión del inicio de sesión

Botón “Iniciar sesión” personalizado

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")
            }
        }
    }
}

    

Uso de Interface Builder

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:

  1. Añade un objeto UIButton a tu diseño. Debes limitar su posición.
  2. En 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];

Identificadores de acceso

Notificaciones

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.

Perfiles

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
    }
}

Mostrar fotos del perfil

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)

Configuración del tipo de autorización

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
}