在Swift中获取Facebook好友列表

7

FBGraphUser对象没有friendsuser_friends属性。

如果我打印FBGraphUser,我得到的结果是:

{
email = "tksybnk_goldmanstein_1414083483@tfbnw.net";
"first_name" = Maria;
gender = female;
id = 1515324765375152;
"last_name" = Goldmanstein;
link = "https://www.facebook.com/app_scoped_user_id/1515324765375152/";
locale = "en_US";
"middle_name" = Amfibibiijdh;
name = "Maria Amfibibiijdh Goldmanstein";
timezone = 0;
"updated_time" = "2014-10-23T16:58:11+0000";
verified = 0;
}

我请求的权限包括:

self.fbLoginView.readPermissions = ["public_profile", "email", "user_friends"]

当我在Graph API Explorer中进行请求时,确实获得了正确的响应:

{
  "data": [
    {
      "name": "Open Graph Test User", 
      "id": "289719481225025"
    }
  ], 
  "paging": {
    "next": "https://graph.facebook.com/v2.1/1515324765375152/friends?limit=5000&offset=5000&__after_id=enc_AezwfD79EK96eREIyB6ZR8fvDu4G4q_wRb49JG4FYp_kNnWK2DNcdLt_LMnDodVraWMBXVR89Cw0FcTYMPmYSt1Q"
  }, 
  "summary": {
    "total_count": 1
  }
}

有没有一种特殊的方法来访问朋友,或者它们应该被打印在这个字典中?

1
最后一部分似乎是对 /me/friends 的请求。第一部分看起来不像是对 /me/friends 的请求。你确实在两种情况下做了完全相同的请求吗? - WizKid
不,第一部分并不是请求那个的。Facebook SDK只在授权后提供该数据。我猜我得再发一个请求来获取好友?我原以为不需要,因为前两个权限已经自动捆绑在FBGraphUser中了。 - user83039
3个回答

6

这是我最终做的事情。与前两个权限不同,我必须单独请求获取好友:

FBRequestConnection.startForMyFriendsWithCompletionHandler({ (connection, result, error: NSError!) -> Void in
        if error == nil {
            var friendObjects = result["data"] as [NSDictionary]
            for friendObject in friendObjects {
                println(friendObject["id"] as NSString)
            }
            println("\(friendObjects.count)")
        } else {
            println("Error requesting friends list form facebook")
            println("\(error)")
        }
    })

1
这也会得到与上面答案相同的结果,但对我不起作用。 - Ritesh Kumar Singh

2
使用以下代码获取好友列表。
var friendsRequest : FBRequest = FBRequest.requestForMyFriends()
friendsRequest.startWithCompletionHandler
{
    (connection:FBRequestConnection!,   result:AnyObject!, error:NSError!) -> Void in
    var resultdict = result as NSDictionary
    println("Result Dict: \(resultdict)")
    var data : NSArray = resultdict.objectForKey("data") as NSArray

    for i in 0 ..< data.count 
    {
      let valueDict : NSDictionary = data[i] as NSDictionary
      let id = valueDict.objectForKey("id") as String
      println("the id value is \(id)")
    }

    var friends = resultdict.objectForKey("data") as NSArray
    println("Found \(friends.count) friends")
}

使用了这段代码,能够看到total_count但是没有实际的列表。我做错了什么?:http://stackoverflow.com/questions/29466473/how-to-get-list-of-all-facebook-friends-when-using-parse - user1406716
是的,我也遇到了这个问题。 - Ritesh Kumar Singh
对我来说也是一样的。似乎实际朋友数据的最大返回范围只有10-25个项目,即使有下一个链接也无法获取第二个,它只会给出一个返回链接。 - NFerocious
在 friends.count 中,你只能得到登录你的应用程序的用户数量。 - Vikram Pote

0

通过该应用程序获取朋友的ID,您可以创建测试用户和朋友以在https://developers.facebook.com/apps上进行测试。

let _graphRequest = GraphRequest(graphPath: "me/friends", parameters: ["fields": "id"])
        _graphRequest.start(completionHandler: { (connection, result, error) in
            if error != nil {
                print("Error fb", error!.localizedDescription)
            }

            else {
                
                let field = result! as? [String: Any]
                var friendObjects = field!["data"] as! [NSDictionary]
                for friendObject in friendObjects {
                    print("found a friend:  \(friendObject["id"] as! NSString)")
                }
                
    
            }
        })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接