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.
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") } } } }
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
:
UIButton
à votre mise en page. Ajustez sa taille comme bon vous semble.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];
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.
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 } }
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)
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 }