2015-07-22 13 views
6

Z powodzeniem zaimplementowałem logowanie do Facebooka w mojej aplikacji, ale nie mogę wysłać zapytania/pobrać adresu e-mail od użytkownika.Wyślij wiadomość e-mail FacebookSDK i Swift

Mam następujący kod:

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. 
    } 

} 

a wyjście println:

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

Kiedy próbuję wyświetlić maila dostałam wartość Nill.

Myślę, że kod jest właściwy, może jakiś SDK, którego brakuje do importu?

Dzięki.

Odpowiedz

13

Put pola, które chcesz z powrotem z żądania wykres w swoich parametrach

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

Ponieważ Graph API może czasami zwrócić tylko minimalną ilość informacji, chyba że zażądano inaczej.

+0

Pracowałem! Użyłem bez .startWithCompletionHandler ({, czy to też jest prawidłowe? Dzięki @thefredelement –

Powiązane problemy