Examen de connexion

Si votre application demande des autorisations autres que public_profile et email, Facebook doit l’examiner avant de vous autoriser à la publier. Renseignez-vous sur le processus et les critères d’examen.

Guide du processus d’examen de connexion

Bouton de connexion personnalisé

Si vous ne souhaitez pas utiliser le bouton de connexion de la marque Facebook (instructions dans Facebook Login pour iOS : démarrage rapide), vous pouvez créer une mise en forme et un comportement personnalisés. Dans l’exemple de code ci-dessous, nous invoquons la boîte de dialogue Login à l’aide de la classe du gestionnaire de connexion (LoginManager) et d’un bouton personnalisé (UIButton). Vous pouvez utiliser l’interface personnalisée de votre choix ou tout type de gestion d’évènements pour invoquer la boîte de dialogue Login.

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

    

Utilisation d’Interface Builder

Ces étapes sont requises pour la version 12.0.0 du SDK Facebook pour iOS et les versions ultérieures. À défaut, les applications utilisant Interface Builder risquent de planter.

Pour ajouter une représentation graphique du bouton de connexion dans Interface Builder :

  1. Ajoutez un objet UIButton à votre mise en page. Ajustez sa taille comme bon vous semble.
  2. Dans Identity inspector, remplacez la propriété Class par FBSDKLoginButton.

Votre mise en page doit désormais ressembler à l’illustration ci-dessous :

Remarque : Ne configurez pas de module pour la classe FBSDKLoginButton. Le paramètre doit être Aucun :

Remarque : Vous pouvez recevoir l’erreur suivante dans les journaux Xcode en raison d’un problème connu de XCFrameworks :

[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.

Pour résoudre ce problème, vous devez précharger la classe FBSDKLoginButton avant le chargement du scénario en ajoutant les éléments suivants à votre méthode application:didFinishLaunchingWithOptions: :

// For Swift
_ = FBLoginButton.self

// For Objective-C
[FBSDKLoginButton class];

Tokens d’accès

Notifications

Vous pouvez suivre les modifications apportées à AccessToken.current à l’aide de .AccessTokenDidChange dans NotificationCenter. Cela vous permet de répondre aux modifications dans l’état de connexion de l’utilisateur·trice :

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

Le SDK pour iOS peut actualiser AccessToken.current au fil du temps, par exemple lorsque le SDK actualise un token avec une plus longue date d’expiration. Par conséquent, vous devez vérifier le dictionnaire userInfo situé dans la notification pour AccessTokenDidChangeUserIDKey afin de déterminer si un changement d’utilisateur a eu lieu.

Profils

Profile contient les informations d’un profil public, ce qui vous permet de personnaliser votre application en y intégrant le nom et la photo de profil de l’utilisateur·trice. Vous pouvez charger le profil de l’utilisateur·trice connecté·e à l’aide de loadCurrentProfile(completion:).

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

Vous pouvez définir la propriété enableUpdatesOnAccessTokenChange sur true afin que le profil se charge automatiquement sur Profile.current. En procédant de la sorte, vous pouvez également observer .ProfileDidChange afin de répondre aux changements apportés au profil :

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

Affichage des photos de profil

La classe FBProfilePictureView vous permet d’afficher facilement l’image de profil Facebook d’un·e utilisateur·trice. Il vous suffit de définir la propriété profileID sur l’instance. Vous pouvez la définit sur la valeur AccessToken.current.userID pour afficher la photo de profil de l’utilisateur·trice actuellement connecté·e.

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

Configuration du type d’autorisation

La valeur par défaut de auth_type pour les boutons Facebook Login du SDK Facebook pour iOS est rerequest (redemander une autorisation). Pour éviter de demander une autorisation qui a déjà été refusée, définissez la valeur nil pour le paramètre auth_type. Vous pouvez également définir la valeur reauthorize (renouveler l’autorisation) pour afficher la boîte de dialogue de renouvellement de l’autorisation si l’accès de l’utilisateur·trice a expiré.

Dans l’exemple suivant, vous pouvez voir comment configurer l’auth_type dans Swift.

let loginButton = FBLoginButton()

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

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

Dans l’exemple suivant, vous pouvez voir comment définir l’auth_type avec une configuration provenant d’un gestionnaire de connexion.

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
}