2016-06-02 4 views
5

erhält Guten Tag! Ich brauche Benutzerdaten von Facebook. Ich erhalte erfolgreich Daten wie Benutzername, ID, Foto. Aber wenn Sie versuchen, den Familienstand abzufragen, bekomme ich eine Antwort auf ein leeres Wörterbuch. Ich habe versucht, verschiedene Anfragen zu stellen, aber immer ein solches Ergebnis. Ich lese auch diese Themen official Facebook site, this, this like Wie kann ich das beheben?wie man Benutzerdaten vom Facebook SDK auf iOS

Mein Beispielcode

static func getUserRelationship() { 
    if (FBSDKAccessToken.currentAccessToken() != nil) { 
     guard let currentUser = getCurrentFacebookUser() else { return } 
     FBSDKGraphRequest(graphPath: "/\(currentUser.id)/family", parameters: nil, HTTPMethod: "GET").startWithCompletionHandler({ (requestConnection, result, error) in 
      if error == nil { 
       let dictionary = result as! [String : AnyObject] 
       let array = dictionary["data"] 
       print("facebook", result, dictionary, array?.count) 
      } else { 
       print(error.localizedDescription) 
      } 
     }) 
    } else { 
     getDataLogin({ 
      getUserBirthday() 
      }, fails: { (error) in 

     }) 
    } 
} 

Ich sehe das Ergebnis in der Konsole

facebook { 
    data =  (
    ); 
} 
+1

Haben Sie für die entsprechenden Berechtigungen gefragt? user_relationships https://developers.facebook.com/docs/facebook-login/permissions#reference-user_relationships – TommyBs

Antwort

13

Ihre GraphRequest falsch war. Wenn Sie Benutzerdaten verwenden möchten, sollte graphPathe "ich" sein und Sie sollten Parameter anfordern, um Beziehungsstatus und andere Informationen zu erhalten. Und auch Sie müssen öffentliches Profil in LogInWithReadPermissons beantragen, so in der Lese permisson: -

let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web 
    fbLoginManager.logInWithReadPermissions(["public_profile","email"], fromViewController: self) { (result, error) -> Void in 
     if error != nil { 
      print(error.localizedDescription) 
      self.dismissViewControllerAnimated(true, completion: nil) 
     } else if result.isCancelled { 
      print("Cancelled") 
      self.dismissViewControllerAnimated(true, completion: nil) 
     } else { 

     } 
    } 

und wann Abrufen von Informationen: -

FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, relationship_status"]).startWithCompletionHandler({ (connection, result, error) -> Void in 
      if (error == nil){ 
       let fbDetails = result as! NSDictionary 
       print(fbDetails) 
      } 
     }) 

Durch die Art und Weise, wenn Sie Familienstand wollen, sollten Sie verwenden graphPath als "ich" nicht "/ {user-id}/family". Sie können das verwenden, um die Familienbeziehungen der Person zu erhalten.

+1

Vielen Dank. Du hast mir geholfen! – Alexander

2

Get facebook user info Update mit schnellen 3

FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, result, error) -> Void in 
     if (error == nil){ 
      let fbDetails = result as! NSDictionary 
      print(fbDetails) 
     }else{ 
      print(error?.localizedDescription ?? "Not found") 
     } 
    })