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

标签 ios facebook swift authentication storyboard

我使用 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

enter image description here

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

相关文章:

ios - 如何在iPhone中自定义showCameraControls?

ios - Firebase iOS Facebook 简单登录错误

ios - iOS中如何通过CMMotionManager获取实际加速度

ios - 将数据从 NSArray 加载到 NSManagedObject

ios - 如何在 UINavigationBar 下方添加 UISegmentControl?

ios - 在安装 cocoapods 后使用未解析的标识符

facebook - 从 "own"Facebook 页面的时间线读取公开帖子 - Pages API 需要审核和业务验证

facebook - swift:Xcode 无法为 Facebook 框架生成 Swift 表示

ios - 在快速下拉 UITableView 时为 TableView 的 headerView 设置动画

swift - 尝试在 Swift 闭包中将类型添加到速记参数名称