我使用 Facebook SDK 在我的应用程序中通过 Facebook 进行了登录。基本上我有一个登录屏幕,当用户单击“Facebook”按钮时,它会进行整个身份验证例程(打开 safari 并要求接受权限)。当用户在接受应用程序访问权限后未登录时,它将转到另一个 View (应用程序的主屏幕)。
问题是当用户已经登录时...我想在主屏幕中打开应用程序而不显示登录 View 。
我正在验证用户是否在 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。这是一个好的做法还是一个疯狂的想法?
有人可以帮助我吗?
最佳答案
我找到了一种方法:
首先将主屏幕设置为 Storyboard中的 Root View
第二步是验证用户是否登录 AppDelegate。 如果用户未登录,则显示将 Root View Controller 更改为登录 View 。
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)
}
最后,使用特定标识符从登录 View 添加一个segue到主视图...当用户成功登录时调用 self.performSegueWithIdentifier("segueIdentifier", sender: nil)
if (self.defaults.stringForKey("isLogged") != nil){
self.performSegueWithIdentifier("facebookLoginSegue", sender: nil)
}
关于ios - 如何制作登录流程IOS应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427629/