Analisi degli accessi

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.

Guida all'analisi degli accessi

Pulsante di accesso personalizzato

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

    

Uso dello strumento di creazione di interfaccia

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:

  1. Aggiungi un oggetto UIButton al layout. Imposta dei limiti per posizionarlo.
  2. In 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];

Token d'accesso

Notifiche

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.

Profili

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

Visualizzazione delle immagini del profilo

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)

Impostazione del tipo di autorizzazione

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
}