我使用Facebook SDK在我的应用程序中登录了facebook。基本上我有一个登录屏幕,当用户点击“Facebook”按钮时,它会进行整个身份验证(打开Safari并请求接受权限)。当用户在接受对应用程序的访问权限后没有登录时,它将转到另一个视图(应用程序的主屏幕)。
问题是当用户已经登录时...我想在主屏幕上打开应用程序,而不显示登录视图。
我正在验证用户是否是viewDidAppear中LoginController中的记录器并调用 performSegueWithIdentifier 方法,因为在 viewDidLoad 中它不起作用。
创建登录屏幕的最佳方法是什么?
class LoginViewController: UIViewController{
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
override func viewDidLoad() {
}
override func viewDidAppear(animated: Bool) {
print("Will Appear method")
if (self.defaults.stringForKey("isLogged") != nil){
self.performSegueWithIdentifier("facebookLoginSegue", sender: nil)
}
}
//MARK - Actions
@IBAction func facebookLogin(sender: UIButton) {
FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email", "user_friends"], fromViewController:self, handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
if (error == nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result
if(fbloginresult.grantedPermissions.contains("email")){
self.defaults.setBool(true, forKey: "isLogged")
self.getFBUserData()
}
}
})
}
func getFBUserData(){
if((FBSDKAccessToken.currentAccessToken()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
if (error == nil){
print(result)
}
})
}
}
}
我考虑在AppDelegate中验证用户“session”并更改storyboard的rootViewController。这是一个好习惯还是一个疯狂的想法?
有人可以帮助我吗?
答案 0 :(得分:1)
我找到了一种方法:
首先将主屏幕设置为故事板中的根视图
第二步是验证用户是否已登录AppDelegate。 如果用户未登录,则显示将根视图控制器更改为登录视图。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if (self.defaults.stringForKey("isLogged") == nil){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
}
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
完成后,将登录视图中的segue添加到具有特定标识符的主视图中......当用户成功登录时,调用 self.performSegueWithIdentifier(" segueIdentifier",sender:nil)强>
if (self.defaults.stringForKey("isLogged") != nil){
self.performSegueWithIdentifier("facebookLoginSegue", sender: nil)
}