尝试使用Swift中的Facebook登录iOS SDK注销应用程序

时间:2017-07-16 19:41:15

标签: ios swift facebook

我目前能够成功使用FBSDKLogin框架登录我的应用程序。我还将用户登录的ViewController指定为委托,然后从用户捕获我需要的必要参数。我现在的问题是,在用户登录后,他们将被带到另一个屏幕,如果他们想要注销该应用程序,他们必须从另一个屏幕进行注销。

为了从另一个屏幕将用户从Facebook注销,我尝试做的是首先捕获对Facebook登录按钮的引用(他们最初用来登录)并将其存储在我的NSUserDefaults中,然后从后一个屏幕中检索此引用,以便将用户注销。这就是我试图捕获引用的方式:

extension FirstViewController: FBSDKLoginButtonDelegate {

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
        print("Did log out of facebook")
    }

    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
        if error != nil {
            print(error)
            return
        }

        let defaults = UserDefaults.standard
        defaults.set(loginButton, forKey: "fbLoginButton")
        ...


    }
}

我后来做的是制作第二个View Controller(允许用户从中注销应用程序),也作为FBSDKLoginButton的委托,并尝试调用logout委托方法,如下所示:

fileprivate func logoutUser() {

        //logout user if logged in via Facebook
        guard let fbLoginButton = UserDefaults.standard.object(forKey: "fbLoginButton") as? FBSDKLoginButton! else { return }
        loginButtonDidLogOut(fbLoginButton)
    }

extension SecondViewController: FBSDKLoginButtonDelegate {

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
        print("Did log out of facebook")
    }

    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    }
}

不幸的是,当我运行我的应用程序并尝试使用FBSDK登录时,我收到以下运行时错误:

[User Defaults] Attempt to set a non-property-list object <FBSDKLoginButton: 0x7ffc64363720; baseClass = UIButton; frame = (10 565; 355 50); opaque = NO; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x608000436f40>> as an NSUserDefaults/CFPreferences value for key fbLoginButton
2017-07-16 14:57:12.623 MyApp[4066:334278] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object <FBSDKLoginButton: 0x7ffc64363720; baseClass = UIButton; frame = (10 565; 355 50); opaque = NO; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x608000436f40>> for key fbLoginButton'

任何人都可以看到它的错误吗?我的方法是将用户从Facebook中记录下来,还是我应该以其他方式进行操作?

0 个答案:

没有答案