You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Facebook Graph API user_friends权限Swift无法返回好友列表

无法获取Facebook user_friends具体数据仅能拿到总数的解决方案

问题核心原因

Facebook Graph API的/me/friends端点现在仅返回同时满足以下条件的好友数据:

  1. 对方是当前用户的Facebook好友
  2. 对方已登录你的应用并明确授权了user_friends权限
  3. 当前用户的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:15:43