Wenn deine App mehr als public_profile
und email
anfordert, muss sie vor dem Release erst durch Facebook geprüft werden. Erfahre mehr über den Überprüfungsvorgang und die Anforderungen, um ihn zu bestehen.
An Stelle des Login-Buttons im Facebook-Design (erläutert unter Facebook Login für iOS – Schnellstart) möchtest du womöglich einen Button mit deinem eigenen Layout und einem benutzerdefinierten Verhalten erstellen. Im folgenden Code-Beispiel rufen wir den Login-Dialog mit der Login-Manager-Klasse (LoginManager
) und einem benutzerdefinierten Button (UIButton
) auf. Du kannst jede andere angepasste Benutzeroberfläche oder Event-Bearbeitung verwenden, um den Login-Dialog aufzurufen.
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") } } } }
Diese Schritte sind für Version 12.0.0 und höher des Facebook-SDK für iOS erforderlich. Apps, die den Interface Builder
verwenden, stürzen möglicherweise ab, wenn du diesen Schritt nicht ausgeführt hast.
So fügst du den Login-Button grafisch im Interface Builder
hinzu:
UIButton
-Objekt zu deinem Layout hinzu. Lege Begrenzungen fest, um ihn es zu positionieren.Identity inspector
die Class
zu FBSDKLoginButton
.Dein Layout sieht jetzt so aus:
Hinweis: Lege für die FBSDKLoginButton
-Klasse kein Modul fest. Hier sollte Keins angezeigt werden:
Hinweis: Aufgrund eines bekannten Problems in XCFrameworks erscheint in Xcode-Protokollen möglicherweise der folgende Fehler:
[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.
Diesen Fehler kannst du beheben, indem du die FBSDKLoginButton-Klasse „vorlädst“ bevor das Storyboard geladen wird. Füge hierzu Folgendes zu deiner application:didFinishLaunchingWithOptions:
-Methode hinzu:
// For Swift _ = FBLoginButton.self // For Objective-C [FBSDKLoginButton class];
Du kannst Änderungen an AccessToken.current
über die .AccessTokenDidChange
-Benachrichtigung im NotificationCenter
nachverfolgen. So kannst du auf Änderungen am Anmeldestatus eines Nutzers reagieren:
NotificationCenter.default.addObserver( forName: .AccessTokenDidChange, object: nil, queue: .main ) { notification in if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil { // Handle user change } }
Das iOS SDK kann AccessToken.current
im Laufe der Zeit aktualisieren, z. B. wenn das SDK ein Token mit einem längeren Ablaufdatum aktualisiert. Daher solltest du das userInfo
-Wörterbuch in der Benachrichtigung zu AccessTokenDidChangeUserIDKey
überprüfen, um festzustellen, ob sich der Nutzer geändert hat.
Profile
enthält öffentliche Profilinformationen, anhand derer du deine App mit dem Namen und dem Profilbild des Nutzers personalisieren kannst. Du kannst das Profil des angemeldeten Nutzers mit loadCurrentProfile(completion:)
laden.
Profile.loadCurrentProfile { profile, error in if let firstName = profile?.firstName { print("Hello, \(firstName)") } }
Lege für die enableUpdatesOnAccessTokenChange
-Eigenschaft true
fest, sodass das Profil automatisch in Profile.current
geladen wird. So kannst du außerdem die .ProfileDidChange
-Benachrichtigung beobachten, um auf Profiländerungen zu reagieren:
Profile.enableUpdatesOnAccessTokenChange(true) NotificationCenter.default.addObserver( forName: .ProfileDidChange, object: nil, queue: .main ) { notification in if let currentProfile = Profile.current { // Update for new user profile } }
Mit der FBProfilePictureView
-Klasse kannst du ganz einfach das Facebook-Profilbild eines Nutzers anzeigen. Lege dazu die profileID
-Eigenschaft auf der Instanz fest. Du kannst hierfür einen Wert von AccessToken.current.userID
eingeben, sodass das Profilbild des aktuell angemeldeten Nutzers angezeigt wird.
let profilePictureView = FBProfilePictureView() profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100) profilePictureView.profileID = AccessToken.current!.userID view.addSubview(profilePictureView)
Der standardmäßige auth_type
für Facebook Login-Buttons im Facebook-SDK für iOS ist erneut anfordern. Um zu verhindern, dass zuvor abgelehnte Berechtigungen erneut angefordert werden, lege für auth_type
nil
fest. Du kannst auch erneut autorisieren festlegen, sodass der Dialog zur erneuten Autorisierung von Daten angezeigt wird, wenn der Datenzugriff eines Nutzers abgelaufen ist.
Dieses Beispiel zeigt, wie du den auth_type
in Swift festlegst.
let loginButton = FBLoginButton() // Set to nil for no auth_type button.authType = nil // Or set to reauthorize button.authType = .reauthorize
Im folgenden Beispiel siehst du, wie der auth_type
in einem Login-Manager mit einer Login-Konfiguration festgelegt wird.
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 }