skip to Main Content

I’m trying to add a Facebook friend list to my Swift iOS app using the Graph API.

I’m struggling to work out how to actually access the data that’s being send back from Facebook.

The response I get looks like this:

success(FacebookCore.GraphResponse(rawResponse: Optional({
"first_name" = Jamie;
id = 1626917907360895;
"last_name" = McAllister;
name = "Jamie McAllister";
picture =     {
    data =         {
        height = 50;
        "is_silhouette" = 0;
        url = "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/12994335_1101318013254223_4481895970110564364_n.jpg?oh=d10209f113213981e4417e7f6f3f82d8&oe=5A91F135";
        width = 50;
    };
};
})))

My graph Request is just /me for now as I’m the only registered user. But all the fields in the response are what I will be requesting from the friends list

The graph request looks like this:

var graph = GraphRequest.init(graphPath: "me")
    graph.parameters = ["fields": "id, first_name, last_name, middle_name, name, email, picture"]

    graph.start({ (response, data) in
        print("======GRAPH=====")
        print(data)

        })

So, I want to be able to take the GraphResponse, make it an Array and assign it to a variable. I am completely stumped by this one.

3

Answers


  1. To read response from Facebook Graph Request use the below line of codes

    let info = data as! [String : AnyObject]
     if info["name"] as? String != nil {
       self.usernameLbl.text = info["name"] as! String
     }
    

    Hope this will help you

    Login or Signup to reply.
  2. Hope this Helps
    Swift 4.2

        func getFbId(){
        if(AccessToken.current != nil){
            let req = GraphRequest(graphPath: "me", parameters: ["fields": "email,first_name,last_name,gender,picture"], accessToken: AccessToken.current, httpMethod: GraphRequestHTTPMethod(rawValue: "GET")!)
            req.start({ (connection, result) in
                switch result {
                case .failed(let error):
                    print(error)
    
                case .success(let graphResponse):
                    if let responseDictionary = graphResponse.dictionaryValue {
                        print(responseDictionary)
                        let firstNameFB = responseDictionary["first_name"] as? String
                        let lastNameFB = responseDictionary["last_name"] as? String
                        let socialIdFB = responseDictionary["id"] as? String
                        let genderFB = responseDictionary["gender"] as? String
                        let pictureUrlFB = responseDictionary["picture"] as? [String:Any]
                        let photoData = pictureUrlFB!["data"] as? [String:Any]
                        let photoUrl = photoData!["url"] as? String
                        print(firstNameFB, lastNameFB, socialIdFB, genderFB, photoUrl)
                    }
                }
            })
        }
    }
    
    Login or Signup to reply.
  3. The Graph request start completion block has changed to requiring 3 arguments instead of 2.

    So you will have something like this (NOTICE THERE ARE NOW 3 ITEMS PASSED IN THE START BLOCK [connection, result, and error]):

    let params = ["fields" : "email, first_name, id, picture"]
        let graphRequest = GraphRequest(graphPath: "me", parameters: params)
        graphRequest.start{
            (connection, result, error in
    
            if error == nil {
               if let responseDictionary = result as? NSDictionary {
    
                UserProfile.userName = responseDictionary["first_name"] as? String ?? "User"
    
    
               UserProfile.userID = responseDictionary["id"] as! String
    
               var pictureUrl = ""
               if let picture = responseDictionary["picture"] as? NSDictionary, let data = picture["data"] as? NSDictionary, let url = data["url"] as? String {
                                            pictureUrl = url
    
                                        }
                                    }
            }else{
                print("error in graph request:", error)
    
            }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search