У меня есть следующий код:
import UIKit
import FacebookLogin
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if AccessToken.current != nil {
// Already logged-in
// Redirect to Home View Controller
goToHome()
}
// Add LoginButton
let loginButton = FBLoginButton(permissions: [ .publicProfile, .email, .userFriends ])
let screenSize:CGRect = UIScreen.main.bounds
let screenHeight = screenSize.height // real screen height
//let's suppose we want to have 10 points bottom margin
let newCenterY = screenHeight - loginButton.frame.height - 20
let newCenter = CGPoint(x: view.center.x, y: newCenterY)
loginButton.center = newCenter
view.addSubview(loginButton)
// Triggered after every successfully login / logout
NotificationCenter.default.addObserver(forName: .AccessTokenDidChange, object: nil, queue: OperationQueue.main) { [weak self] _ in
if AccessToken.current != nil {
// Successfully just Logged in
// Redirect to Home View Controller
self?.goToHome()
} else {
// Successfully just Logged out
}
}
}
func goToHome() {
let storyboard = UIStoryboard(name: "HomeAfterLogIn", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "HomeAfterLogInViewController") // I called mine like that (check screenshot below)
self.navigationController?.pushViewController(vc, animated: true)
}
}
Этот код позволяет пользователю войти в мое приложение с помощью SDK Facebook. LaunchScreen.storyboard выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/IUqs6.png)
, что затем приводит к Main.storyboard, который выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/4kMiV.png)
Если вход в систему пользователя успешен, они будут перенаправлены на HomeAfterLogIn.storyboard, как показано ниже:
Однако эта страница непрерывно загружается после того, как пользователь вошел в систему, то есть пользователь успешно вошел в систему, отображается метка «Вход в систему», а затем она перезагружается снова и снова, тогда как я просто хочу, чтобы она загружалась один раз. , Если пользователь ранее вошел в систему, страница загружается только один раз, как показано ниже:
if AccessToken.current != nil {
// Already logged-in
// Redirect to Home View Controller
goToHome()
}
Но если пользователь новый пользователь / первый раз, он будет зацикливаться, поэтому я думаю, что ошибка здесь:
// Triggered after every successfully login / logout
NotificationCenter.default.addObserver(forName: .AccessTokenDidChange, object: nil, queue: OperationQueue.main) { [weak self] _ in
if AccessToken.current != nil {
// Successfully just Logged in
// Redirect to Home View Controller
self?.goToHome()
} else {
// Successfully just Logged out
}
}