2016-06-02 20 views
5

Dzień dobry! Potrzebuję danych użytkownika z Facebooka. Udało mi się uzyskać dane takie jak nazwa użytkownika, identyfikator, zdjęcie. Ale kiedy próbujesz zapytać, na przykład o stan cywilny, otrzymuję odpowiedź na pusty słownik. Próbowałem tworzyć różne żądania, ale zawsze otrzymuję taki wynik. Też przeczytałem te motywy: official Facebook site, this, this jak mogę to naprawić?jak uzyskać dane użytkownika z Facebook SDK na iOS

Mój przykład kod

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 

     }) 
    } 
} 

widzę wynik w konsoli

facebook { 
    data =  (
    ); 
} 
+1

byłaś poproszony o odpowiednimi uprawnieniami? user_relationships https://developers.facebook.com/docs/facebook-login/permissions#reference-user_relationships – TommyBs

Odpowiedz

13

Twój GraphRequest była błędna. Jeśli chcesz wziąć dane użytkownika, graphPathe powinno być "me" i powinieneś poprosić o parametr, aby uzyskać stan relacji i inne informacje. A także trzeba zwrócić profil publiczny w LogInWithReadPermissons, So In odczytu 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 { 

     } 
    } 

i podczas pobierania informacji: -

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

Nawiasem mówiąc, jeśli chcesz stanu cywilnego należy użyć graphPath jako "ja" nie "/ {user-id}/family". Możesz użyć tego do uzyskania relacji rodzinnych danej osoby.

+1

Dziękuję bardzo. Pomogłeś mi! – Alexander

2

Get facebook użytkownik aktualizacja informacji o szybkiej 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") 
     } 
    })