Se l'app richiede altre informazioni oltre a public_profile
ed email
, dovrà essere sottoposta alla procedura di analisi da parte di Facebook prima del rilascio. Scopri di più sulla procedura di analisi e sui requisiti necessari per superarla.
Invece di usare il pulsante di accesso di Facebook (illustrato in Avvio rapido di Facebook Login per iOS), ti consigliamo di configurare un layout e un comportamento personalizzati. L'esempio di codice seguente mostra come richiamare la finestra di dialogo di accesso usando la classe login manager (LoginManager
) e un pulsante personalizzato (UIButton
). Per richiamare la finestra di dialogo di accesso, puoi utilizzare qualsiasi altra interfaccia utente o gestione degli eventi personalizzate.
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") } } } }
Questi passaggi sono obbligatori per la versione 12.0.0 e successive dell'SDK di Facebook per iOS. Se non completi questo passaggio, le app che usano Interface Builder
potrebbero arrestarsi in modo anomalo.
Per aggiungere la grafica del pulsante di accesso in Interface Builder
:
UIButton
al layout. Imposta dei limiti per posizionarlo.Identity inspector
, modifica la proprietà Class
in FBSDKLoginButton
.L'aspetto attuale del layout dovrebbe essere simile al seguente:
Nota: non impostare un modulo per la classe FBSDKLoginButton
. Deve essere None (Nessuno):
Nota: nei log Xcode potrebbe essere riportato il seguente errore dovuto a un problema noto con XCFrameworks:
[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.
Puoi risolverlo effettuando un "pre-caricamento" della classe FBSDKLoginButton prima del caricamento dello storyboard aggiungendo quanto segue al metodo application:didFinishLaunchingWithOptions:
:
// For Swift _ = FBLoginButton.self // For Objective-C [FBSDKLoginButton class];
Puoi monitorare le modifiche di AccessToken.current
con la notifica .AccessTokenDidChange
in NotificationCenter
. In questo modo, puoi rispondere alle modifiche apportate allo stato di accesso dell'utente:
NotificationCenter.default.addObserver( forName: .AccessTokenDidChange, object: nil, queue: .main ) { notification in if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil { // Handle user change } }
L'SDK per iOS può aggiornare AccessToken.current
nel tempo, ad esempio, quando l'SDK allunga la data di scadenza di un token. Di conseguenza, devi controllare il dictionary userInfo
nella notifica e verificare che sia presente l'elemento AccessTokenDidChangeUserIDKey
, che indica una modifica dell'utente.
Profile
contiene informazioni sul profilo pubblico che consentono di personalizzare l'app con il nome e l'immagine del profilo dell'utente. Puoi caricare il profilo dell'utente che ha effettuato l'accesso tramite loadCurrentProfile(completion:)
.
Profile.loadCurrentProfile { profile, error in if let firstName = profile?.firstName { print("Hello, \(firstName)") } }
Puoi impostare la proprietà enableUpdatesOnAccessTokenChange
su true
per caricare automaticamente il profilo in Profile.current
. In questo modo, vedrai anche la notifica .ProfileDidChange
per rispondere a eventuali modifiche del profilo:
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
consente di mostrare con facilità l'immagine del profilo Facebook di un utente. Imposta semplicemente la proprietà profileID
sull'istanza. Puoi impostarla su un valore di AccessToken.current.userID
per mostrare l'immagine del profilo dell'utente che ha effettuato l'accesso.
let profilePictureView = FBProfilePictureView() profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100) profilePictureView.profileID = AccessToken.current!.userID view.addSubview(profilePictureView)
L'impostazione predefinita auth_type
per i pulsanti Facebook Login nell'SDK di Facebook per iOS è rerequest. Se desideri evitare di chiedere nuovamente autorizzazioni precedentemente rifiutate, imposta auth_type
su nil
. Puoi anche impostarla su reauthorize per mostrare la finestra di dialogo di riautorizzazione dei dati se l'accesso ai dati dell'utente è scaduto.
L'esempio seguente mostra come impostare auth_type
in Swift.
let loginButton = FBLoginButton() // Set to nil for no auth_type button.authType = nil // Or set to reauthorize button.authType = .reauthorize
L'esempio seguente mostra come impostare auth_type
utilizzando una configurazione di accesso con un login manager.
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 }