如何制作登录流程IOS应用

Posted

技术标签:

【中文标题】如何制作登录流程IOS应用【英文标题】:How to make a login flow IOS app 【发布时间】:2015-10-30 02:02:08 【问题描述】:

我使用 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 中验证用户“会话”并更改情节提要的 rootViewController。这是一个好的做法还是一个疯狂的想法?

有人可以帮我吗?

【问题讨论】:

我认为你需要把这个放在viewDidAppear: 使您的初始视图成为主视图,并在 viewDidLoad: 中注销使用时执行if 语句segue,这样当他们'重新登录。 嗨@FarhadNezhad,我找到了一种方法......感谢您的帮助。在 AppDelegate 中我验证用户是否未登录我更改我的 RootView。 @AlessandroGarcez 是的,这是另一种方式,我很高兴我能帮上一点忙,如果我这样做了:P 【参考方案1】:

我找到了办法:

首先将主屏幕设置为storyboard中的根视图

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

【讨论】:

模糊的解决方案,没有连贯的解释。

以上是关于如何制作登录流程IOS应用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用登录流程

如何在 iOS 应用中及时登录 Facebook

如何在 iOS Objective-C 中集成“使用 Apple 登录”流程?

制作一个日程安排 ios 应用程序,但不明白怎么做

iOS 应用程序中的 Twitter 提要 - 我如何仅从我自己的帐户获取列表提要 [无需应用用户登录 Twitter]

如何在 iOS 上使用 Sign In with Google 修复“用户取消了登录流程。”?