如何使用Swift删除注销按钮并永久存储会话FBSDK IOS [英] How to Remove the Logout Button and store the session permanently FBSDK IOS using Swift

查看:92
本文介绍了如何使用Swift删除注销按钮并永久存储会话FBSDK IOS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个应用程序,用户可以在其中使用Facebook登录.我正在获取用户信息,如个人资料图片用户名等.现在,当我单击使用Facebook按钮FB登录"时,要求获得我的登录权限.但是随后,注销按钮"显示在与LoginWithFacebook按钮相同的位置.我要删除注销按钮,因为我不希望用户注销.我想存储会话并一直使用它,直到取消安装应用程序为止,因为我不希望用户每次打开应用程序时都登录.到目前为止,这是我的代码

I am creating an app in which user can Sign in using Facebook. I am fetching user info like profile picture Username etc. Now when i tap on Login with facebook button FB ask for permission i am loged in. but then there is Logout Button displaying at the same place as LoginWithFacebook button was. I want to Remove the logout button because i do not want the user to log out. I want to store the session and use it all the way long until app is unintsalled because I do not want the user to login each time when he opens the app. This is my code so far

class ViewController: UIViewController, FBSDKLoginButtonDelegate {
@IBOutlet weak var btnFacebook: FBSDKLoginButton!
@IBOutlet weak var ivUserProfileImage: UIImageView!
@IBOutlet weak var lblName: UILabel!
var strFirstName: String!
var strLastName: String!
var strPictureURL: String!

override func viewDidLoad() {
    super.viewDidLoad()
    configureFacebook()
}

func configureFacebook()
{
    btnFacebook.readPermissions = ["public_profile", "email", "user_friends"];
    btnFacebook.delegate =  self
}

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
{
    FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"first_name, last_name, picture.type(large)"]).startWithCompletionHandler { (connection, result, error) -> Void in
        //fetching first and last name
        self.strFirstName = (result.objectForKey("first_name") as? String)!
        self.strLastName = (result.objectForKey("last_name") as? String)!
        self.strPictureURL = (result.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as? String)!
        // contactinating first and last name
        self.lblName.text = "Welcome, \(self.strFirstName) \(self.strLastName)"
        // assinging image
        self.ivUserProfileImage.image = UIImage(data: NSData(contentsOfURL: NSURL(string: self.strPictureURL)!)!)
        }
}

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
    let loginManager: FBSDKLoginManager = FBSDKLoginManager()
    //for logging out from facebook
    loginManager.logOut()
}

推荐答案

通过使用以下代码,通过Facebook登录后,您可以隐藏注销按钮,

You can hide logout button after login via facebook by using below code like,

 if(FBSDKAccessToken.currentAccessToken() != nil)
 {
       self.btnFacebook.hidden = true
 }
 else
 {
       self.btnFacebook.hidden = false
 }

注意:您每次登录和注销代码后都需要进行检查,以便可以轻松维护该按钮日志.

NOTE: You need to check this after every login and logout in your code so that you can easily maintain that button log.

对于会话,将其写入LoginController的viewDidLoad中以获取用户信息,

For Session, Write this in viewDidLoad of LoginController to get user info,

    self.btnFacebook.delegate = self
    self.btnFacebook.readPermissions = ["public_profile","email","user_friends"]

    FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "getUserProfile:", name: FBSDKProfileDidChangeNotification, object: nil)

    if(FBSDKAccessToken.currentAccessToken() != nil)
    {
        let accessToken = FBSDKAccessToken.currentAccessToken()
        if(accessToken != nil)
        {

            let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
            req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
                if(error == nil)
                {
                    let userInfo = result as AnyObject
                    if let _ = userInfo.valueForKey("email") as? NSString
                    {
                        // Extract user info here
                        let userDic : NSDictionary = NSDictionary(dictionary: userInfo as! [NSObject : AnyObject])
                        print(userDic)
                    }
                    else
                    {
                       // Logout if you want or display error message
                       // let loginManager = FBSDKLoginManager()
                       // loginManager.logOut()
                    }
                }

            })
        }
    }

调用此观察者方法,

func getUserProfile(notification : NSNotification)
{
    let accessToken = FBSDKAccessToken.currentAccessToken()
    if(accessToken != nil)
    {

        let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
        req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
            if(error == nil)
            {
                let userInfo = result as AnyObject
                if let _ = userInfo.valueForKey("email") as? NSString
                {
                    let userDic : NSDictionary = NSDictionary(dictionary: userInfo as! [NSObject : AnyObject])
                    print(userDic)
                }
                else
                {
                    // logout or error message 
                    //let loginManager = FBSDKLoginManager()
                    //loginManager.logOut()
                }
            }
        })
    }
}

希望这会对您有所帮助.

Hope this will help you.

这篇关于如何使用Swift删除注销按钮并永久存储会话FBSDK IOS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆