2015-07-22 17 views
6

Sono riuscito a implementare l'accesso di Facebook nella mia app, ma non sono in grado di interrogare/recuperare l'indirizzo e-mail dall'utente.E-mail di ritorno FacebookSDK e Swift

Ho il codice seguente:

import UIKit 

class testViewController: UIViewController, FBSDKLoginButtonDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     if (FBSDKAccessToken.currentAccessToken() != nil) 
     { 
      // User is already logged in, do work such as go to next view controller. 

      // Or Show Logout Button 
      let loginView : FBSDKLoginButton = FBSDKLoginButton() 
      self.view.addSubview(loginView) 
      loginView.center = self.view.center 
      loginView.readPermissions = ["public_profile", "email", "user_friends"] 
      loginView.delegate = self 
      self.returnUserData() 
     } 
     else 
     { 
      let loginView : FBSDKLoginButton = FBSDKLoginButton() 
      self.view.addSubview(loginView) 
      loginView.center = self.view.center 
      loginView.readPermissions = ["public_profile", "email", "user_friends"] 
      loginView.delegate = self 
     } 

    } 

    // Facebook Delegate Methods 

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 
     println("User Logged In") 

     if ((error) != nil) 
     { 
      // Process error 
     } 
     else if result.isCancelled { 
      // Handle cancellations 
     } 
     else { 
      // If you ask for multiple permissions at once, you 
      // should check if specific permissions missing 
      if result.grantedPermissions.contains("email") 
      { 
       // Do work 
      } 

      self.returnUserData() 
     } 

    } 

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) { 
     println("User Logged Out") 
    } 

    func returnUserData() { 
     let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil) 
     graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 

      if ((error) != nil) 
      { 
       // Process error 
       println("Error: \(error)") 
      } 
      else 
      { 
       println("fetched user: \(result)") 
       let userName : NSString = result.valueForKey("name") as! NSString 
       println("User Name is: \(userName)") 
       let userEmail : NSString = result.valueForKey("email") as! NSString 
       println("User Email is: \(userEmail)") 
      } 
     }) 
    } 

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

} 

E l'uscita println:

fetched user: { 
    id = 808101565906152; 
    name = "Marcelo Pontes Machado"; 
} 

Quando provo a visualizzare l'e-mail ho ricevuto un valore nill.

Penso che il codice sia corretto, forse qualche SDK che mi manca per importare?

Grazie.

risposta

13

Mettere i campi desiderati indietro dalla richiesta Graph nei parametri

FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id,email,name,picture.width(480).height(480)"]).startWithCompletionHandler({ 

Perché il Graph API può talvolta restituire solo una minima quantità di informazioni se non diversamente richiesto.

+0

Ha funzionato! Ho usato senza .startWithCompletionHandler ({, anche questo è corretto? Grazie @thefredelement –

Problemi correlati