求助:Facebook Graph API user_friends权限Swift无法返回好友列表
无法获取Facebook user_friends具体数据仅能拿到总数的解决方案
问题核心原因
Facebook Graph API的/me/friends端点现在仅返回同时满足以下条件的好友数据:
- 对方是当前用户的Facebook好友
- 对方已登录你的应用并明确授权了user_friends权限
- 当前用户的access token已包含user_friends权限
你目前能拿到total_count说明好友关系和权限申请的基础配置没问题,但具体数据为空,大概率是测试用户未完成授权,或是请求参数有误。
具体修复步骤
1. 修正请求参数
你的代码里把user_friends加到了fields参数里,这是错误的——user_friends是权限而非用户字段,需要移除:
fileprivate func getFBFriends() { // 移除多余的user_friends字段,仅保留用户属性字段 let params = ["fields": "id, first_name, last_name, name, email, picture"] let graphRequest = GraphRequest(graphPath: "/me/friends", parameters: params) let connection = GraphRequestConnection() connection.add(graphRequest, completion: { (connection, result, error) in if let error = error { print("Error Getting Friends: \(error.localizedDescription)") self.dispatchGroup.leave() return } if let userData = result as? [String:Any] { print(userData) } self.dispatchGroup.leave() }) connection.start() }
2. 确保所有测试用户都授权了user_friends权限
- 让每个测试用户重新登录应用,在Facebook登录授权弹窗中,确认勾选并同意
user_friends权限(如果登录时未弹出该权限选项,说明你在初始化Facebook登录时未请求该权限,需要在登录代码中添加权限请求) - 登录请求示例(需包含user_friends):
let loginManager = LoginManager() loginManager.logIn(permissions: ["public_profile", "email", "user_friends"], viewController: self) { result in // 登录回调逻辑 } - 可通过开发者后台的「测试用户」管理页面,查看每个测试用户的已授权权限,确认
user_friends处于已授权状态
3. 验证当前用户的access token权限
调用/me/permissions端点确认当前用户的token是否包含user_friends权限:
fileprivate func checkPermissions() { let graphRequest = GraphRequest(graphPath: "/me/permissions", parameters: nil) let connection = GraphRequestConnection() connection.add(graphRequest, completion: { (connection, result, error) in if let error = error { print("Error checking permissions: \(error.localizedDescription)") return } if let permissions = result as? [String:Any], let data = permissions["data"] as? [[String:Any]] { for permission in data { print("Permission: \(permission["permission"] ?? ""), Status: \(permission["status"] ?? "")") } } }) connection.start() }
4. 确认应用模式与权限配置
- 开发模式下,测试用户可直接使用申请中的
user_friends权限,无需等待审核通过 - 确保在开发者后台的「应用审核」-「权限与功能」中,已添加
user_friends权限并提交申请(即使是测试,也需要先添加该权限到申请列表)
补充说明
total_count返回的是当前用户的所有Facebook好友总数,无论对方是否使用你的应用;而data数组仅返回满足条件的好友,这是Facebook API的设计规则,并非代码或配置错误。
内容的提问来源于stack exchange,提问作者iBug
相关产品推荐
相关产品推荐

