Swift 4调用Facebook Graph API发布内容未显示在主页墙问题
解决Facebook企业主页发帖显示在访客区的问题
看起来你遇到的核心问题是:使用页面访问令牌发帖时,因为参数配置错误,导致Graph API将请求识别为用户以访客身份发帖,而非页面自身发布内容。我来帮你一步步修复这个问题:
问题根源
你的请求参数里额外传入了uid(当前用户ID)和appId,这两个参数会让Graph API误以为是用户个人向页面提交访客帖子,而不是页面官方发布内容。另外要注意publish_actions权限已经被废弃,现在只需要确保页面访问令牌拥有manage_pages和publish_pages权限即可。
修复步骤
- 移除多余参数:删除
params里的uid和appId字段,只保留必要的核心参数。 - 确认页面令牌有效性:用Facebook的Access Token Debugger验证你的页面访问令牌是否包含
manage_pages和publish_pages权限,且令牌未过期。 - 强制立即发布:添加
"published": true参数,确保内容直接发布到主页墙(默认未设置时可能会保存为草稿)。
修改后的完整代码
// 先获取页面访问令牌(这部分逻辑可以保留) let connection = FBSDKGraphRequestConnection() connection.add(FBSDKGraphRequest(graphPath: "/\(pageId)?fields=access_token", parameters: nil)) { (httpResponse, result, error) in if let error = error { print("获取页面令牌失败: \(error)") } else if let resultDict = result as? [String: Any], let pageToken = resultDict["access_token"] as? String { self.pageAccessToken = pageToken // 获取到令牌后再执行发帖请求 self.postToFacebookPage() } } connection.start() // 单独的发帖方法,逻辑更清晰 func postToFacebookPage() { guard let pageToken = self.pageAccessToken else { print("页面令牌为空,无法发帖") return } let captionText = "\(self.itemName.text ?? "") - $ \(self.itemcost) \(self.width)w x \(self.depth)d x \(self.height)h" let params: [String: Any] = [ "access_token": pageToken, "caption": captionText, "url": imageURL, "published": true // 确保内容立即发布到主页墙 ] FBSDKGraphRequest(graphPath: "\(pageId)/photos", parameters: params, httpMethod: "POST").start { (connection, result, error) in if let error = error { print("发帖失败: \(error)") } else { print("发帖成功!") print("返回结果: \(result ?? "无结果数据")") } } }
额外验证建议
如果修改后还是有问题,建议用Graph API Explorer手动测试:
- 选择你的应用,获取带
manage_pages和publish_pages权限的页面访问令牌 - 调用
POST /{page-id}/photos接口,仅传入caption、url和页面令牌,不要加uid参数 - 如果手动调用能正常发布到主页墙,说明代码里可能存在令牌获取错误的细节问题;如果手动调用也不行,那可能是Facebook页面的权限设置限制(比如页面是否开启了发帖审核)
内容的提问来源于stack exchange,提问作者Gopinath Bizarre
相关产品推荐
相关产品推荐

