2016-09-08 2 views
10

Ich habe die FB neueste SDK (nicht swift) integriert und Login funktioniert gut. Alles, was ich wissen müssen, wie ich die Grafik Antwortdaten seit seiner nicht eine gültige JSON analysieren SieWie verarbeitet man die Antwortdaten von FBSDKGraphRequest in Swift 3

Arbeitscode:

 func configureFacebook() 
     { 
      login.readPermissions = ["public_profile", "email", "user_friends"]; 
      login.delegate = self 
     } 


func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
    print("Login buttoon clicked") 
    let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"first_name,email, picture.type(large)"]) 

    graphRequest.start(completionHandler: { (connection, result, error) -> Void in 

     if ((error) != nil) 
     { 
      // Process error 
      print("Error: \(error)") 
     } 
     else 
     { 
      print(result) 

     } 
    }) 
} 

Mit Ausgabe:

Login button clicked 
Optional({ 
    "first_name" = KD; 
    id = 10154CXXX; 
    picture =  { 
     data =   { 
      "is_silhouette" = 0; 
      url = "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/XXXn.jpg?oh=a75a5c1b868fa63XXX146A"; 
     }; 
    }; 
}) 

So welchem ​​Format soll ich die umwandeln über Daten, um Werte wie URL oder first_name usw. zu erhalten.

Auch ich band, das zu NSDictionary umwandelt und erhielt Fehler:

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
     print("Login buttoon clicked") 
     let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"first_name,email, picture.type(large)"]) 

     graphRequest.start(completionHandler: { (connection, result, error) -> Void in 

      if ((error) != nil) 
      { 
       print("Error: \(error)") 
      } 
      else 
      { 
       do { 

       let fbResult = try JSONSerialization.jsonObject(with: result as! Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary 
       print(fbResult.value(forKey: "name")) 


       } catch { 
        print(error) 
       } 

      } 
     }) 
    } 

Antwort

17

Sie tun es einfach wie folgt:

let data:[String:AnyObject] = result as! [String : AnyObject] 
print(data["first_name"]!) 

Swift 3:

Sicher Abwickeln & Any statt AnyObject

if let data = result as? [String:Any] { 

} 
+4

Dies scheint die einfachste zu sein. Endgültiger Code für mich. Lassen Sie Daten: [String: AnyObject] = Ergebnis als! [String: AnyObject] let urlData = data ["Bild"] ?. value (forKey: "data") as! [String: AnyObject] let url = urlData ["url"]! –

+0

Profil Profil versucht Profil wie früher, aber jetzt nicht zurückgegeben, obwohl Info dort ist: 'profilePictureURLStr = Daten [" picture.data.url "] als? String'. Etwas stimmt nicht. –

+0

Verwenden Sie swiftyJSON? –

Verwandte Themen