使用PFFacebookUtils与Swift和iOS 9获取Facebook帐户详细信息

时间:2016-01-11 16:33:02

标签: ios swift facebook parse-platform

我正在通过Facebook实施社交登录。 我使用以下代码记录用户和"检索"与他的账户有关的信息(我希望),

PFFacebookUtils.logInInBackgroundWithReadPermissions(["public_profile", "email", "user_friends"]) {
  (user: PFUser?, error: NSError?) -> Void in
  if let user = user {
    if user.isNew {
      print("User signed up and logged in through Facebook!")
    } else {
      print("User logged in through Facebook!")
    }
  } 
  print(user)
  else {
    print("Uh oh. The user cancelled the Facebook login.")
  }
}

但是控制台输出(以及要解析的浏览数据)只显示一个id,没有链接到这个Facebook帐户的信息。

我读了这个以获取用户详细信息,我必须在登录请求后发送FBSDKGraphRequest。 如果是这样,有什么区别beetwin(以及有什么好处)使用登录而不是在Parse实现中链接?

有没有办法自动导入与"权限相关的信息"登录后的Facebook帐号?

提前谢谢你, 米歇尔

1 个答案:

答案 0 :(得分:1)

根据您的需要编辑读取权限,我没有使用PFF,但FBSDK为我完成了工作,希望它适合您

import UIKit
import FBSDKCoreKit
import FBSDKLoginKit


class ProfileViewController: UIViewController, FBSDKLoginButtonDelegate {

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var imageView: UIImageView!

    @IBOutlet weak var nextButton: UIButton!
    @IBOutlet weak var fbLoginButton: FBSDKLoginButton!


    override func viewDidLoad() {
        super.viewDidLoad()

        self.fbLoginButton.delegate = self
        self.fbLoginButton.readPermissions = ["public_profile"]
        self.fbLoginButton.publishPermissions = ["publish_actions"]
        NSNotificationCenter.defaultCenter().addObserver(
            self,
            selector: "fbProfileChanged:",
            name: FBSDKProfileDidChangeNotification,
            object: nil)
        FBSDKProfile.enableUpdatesOnAccessTokenChange(true)

        // If we have a current Facebook access token, force the profile change handler
        if ((FBSDKAccessToken.currentAccessToken()) != nil)
        {
            self.fbProfileChanged(self)
        } 
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }



    //facebooks functions
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        if (error != nil)
        {
            print( "\(error.localizedDescription)" )
        }
        else if (result.isCancelled)
        {
            // Logged out?
            print( "Login Cancelled")
        }
        else
        {
            // Logged in?
            print( "Logged in, segue now")
            self.performSegueWithIdentifier("showHome", sender: self)
        }
    }



    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {

    }


    //see bitfountain
    func fbProfileChanged(sender: AnyObject!) {

        let fbProfile = FBSDKProfile.currentProfile()
        if (fbProfile != nil)
        {
            // Fetch & format the profile picture
            let strProfilePicURL = fbProfile.imagePathForPictureMode(FBSDKProfilePictureMode.Square, size: imageView.frame.size)
            let url = NSURL(string: strProfilePicURL, relativeToURL: NSURL(string: "http://graph.facebook.com/"))
            let imageData = NSData(contentsOfURL: url!)
            let image = UIImage(data: imageData!)

            self.nameLabel.text = fbProfile.name
            self.imageView.image = image

            self.nameLabel.hidden = false
            self.imageView.hidden = false
            self.nextButton.hidden = false
        }
        else
        {
            self.nameLabel.text = ""
            self.imageView.image = UIImage(named: "")

            self.nameLabel.hidden = true
            self.imageView.hidden = true
        }
    }



    @IBAction func nextButtonPressed(sender: UIButton) {
    self.performSegueWithIdentifier("showHome", sender: self)
    }


}