如何制作登录流程IOS应用程序

时间:2015-10-30 02:02:09

标签: ios facebook swift login storyboard

我使用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。这是一个好习惯还是一个疯狂的想法?

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我找到了一种方法:

首先将主屏幕设置为故事板中的根视图

enter image description here

第二步是验证用户是否已登录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)
        }