Facebook Graph API GET 请求 - 应包含“字段”参数(Swift,Facebook SDK v4.5.1)
Posted
技术标签:
【中文标题】Facebook Graph API GET 请求 - 应包含“字段”参数(Swift,Facebook SDK v4.5.1)【英文标题】:Facebook Graph API GET request - Should contain "fields" parameter (Swift, Facebook SDK v4.5.1) 【发布时间】:2015-08-16 03:58:10 【问题描述】:我的 ios 应用在注册期间使用 Facebook 的 Graph API 请求来获取用户信息,这在升级到 Facebook 的最新 SDK 之前运行良好。升级后,我收到运行时错误消息:“FBSDKLog:从 Graph API v2.4 开始,对 /me 的 GET 请求应包含明确的“字段”参数”。
代码如下:
func requestFacebook()
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphpath: "me", parameters: nil)
graphRequest.startWithCompletionHandler( (connection, result, error) -> Void in
if ((error) != nil)
// Process error
println("Error: \(error)")
else if error == nil
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
var currentDate = NSDate()
var birthdayFormatter = NSDateFormatter()
let userCalendar = NSCalendar.currentCalendar()
birthdayFormatter.dateFormat = "MM/DD/YYYY"
var birthdayNSDate = birthdayFormatter.dateFromString(birthday as String)
var userAge = self.calculateAge(birthdayNSDate!)
PFUser.currentUser()!["age"] = userAge
var facebookID: NSString = (result.valueForKey("id") as? NSString)!
var pictureURL = "https://graph.facebook.com/\(facebookID)/picture?type=large&return_ssl_resources=1"
var URLRequest = NSURL(string: pictureURL)
var URLRequestNeeded = NSURLRequest(URL: URLRequest!)
NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: (response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
if error == nil
var picture = PFFile(data: data)
PFUser.currentUser()!["picture"] = picture
PFUser.currentUser()!.saveInBackgroundWithBlock( (success, error) -> Void in
if error == nil
var userPicture:PFFile = PFUser.currentUser()!.valueForKey("picture") as! PFFile
userPicture.getDataInBackgroundWithBlock (imageData, error) -> Void in
if error == nil
self.meProfileImageView.image = UIImage(data: imageData!)
var userName:String = PFUser.currentUser()!.valueForKey("username") as! String
var userAge:Int = PFUser.currentUser()!.valueForKey("age") as! Int
self.meLabel.text = "\(userName), \(userAge)"
self.findFriends()
else
println(error)
)
else
println("Error: \(error.localizedDescription)")
)
)
错误信息在这一行:
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
此代码在升级到 Facebook 的 SDK v4.5.1 之前运行良好,但我不知道现在要更改什么才能使其正常工作。非常感谢任何可以帮助我的人!
【问题讨论】:
【参考方案1】:这一行需要一个不为零的参数值
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
例如,我将展开更多,这是某种伪代码:
例如,对于 ObjC,它会是这样,所以上面的内容将如下所示:
parameters:@@"fields": @"id, name"
很快就会有类似的东西
类似这样的:
parameters:["fields": "email"]
这只是两个字段,又是伪代码,但你需要指定参数
更新:
我添加此更新是为了向人们展示您在哪里可以找到上述字段的参数,这是一个快速链接:
这是 Paramters 字段信息(对于 FBSDK,这应该大致保持不变,其中一些是“核心”,这意味着它不会真正改变那么多,但我会随时更新):
https://developers.facebook.com/docs/graph-api/reference/user
以下信息的格式如下,有点,我只是快速完成了这个:
“参数” “类型”
“描述”
id 数字字符串
此人的用户帐户的 ID。此 ID 对每个应用程序都是唯一的 并且不能跨不同的应用程序使用。我们的升级指南提供 有关应用特定 ID 的更多信息
关于字符串
此人个人资料的“关于我”部分
年龄范围年龄范围
此人的年龄段表示为最小值和最大值 年龄。例如,大于 18,小于 21。
简介字符串
个人简介
生日字符串
这个人的生日。这是一个固定格式的字符串,如 MM/DD/YYYY。 但是,人们可以控制谁可以看到他们的出生年份 与月份和日期分开,所以这个字符串只能是年份 (YYYY) 或月 + 日 (MM/DD)
上下文用户上下文
此人的社会背景
货币货币
此人的当地货币信息
设备列表
此人正在使用的设备列表。这将只返回 iOS 和 安卓设备
教育列表
人的教育
电子邮件字符串
个人资料中列出的此人的主要电子邮件地址。这个领域 如果没有可用的有效电子邮件地址,将不会被退回
favorite_athletes列表
该人喜欢的运动员
favorite_teams 列表
这个人喜欢的运动队
名字字符串
这个人的名字
性别字符串
此人选择的性别,男性或女性。这个值将是 如果将性别设置为自定义值,则省略
家乡页面
这个人的家乡
inspirational_people列表
鼓舞人心的人
install_type 枚举
安装类型
已安装 bool
发出请求的应用程序是否已安装?
有兴趣的人列表
此人感兴趣的性别
is_shared_login bool
这是共享登录(例如灰色用户)
is_verified布尔型
拥有大量追随者的人可以具有真实性 他们的身份由 Facebook 手动验证。该字段表示 是否以这种方式验证此人的个人资料。这是与众不同的 来自经过验证的字段
语言列表
代表此人知道的语言的 Facebook 页面
姓氏字符串
这个人的姓
链接字符串
人的时间线的链接
位置页面
此人在个人资料中输入的当前位置。 该字段与签到无关
语言环境字符串
此人的语言环境
meeting_for列表
这个人有兴趣开会
**middle_name 字符串
这个人的中间名
名称字符串
此人的全名
核心默认
name_format 字符串
人名的格式可以正确处理中文、日文或 韩国订购
payment_pricepoints PaymentPricepoints
此人的付款价格点
test_group unsigned int32
平台测试组
政治字符串
这个人的政治观点
relationship_status 字符串
此人的关系状况
宗教字符串
这个人的宗教信仰
security_settings 安全设置
安全设置
significant_other用户
这个人的另一半
运动列表
这个人喜欢的运动
引号字符串
这个人最喜欢的名言
third_party_id 字符串
一个包含匿名但唯一标识符的字符串 人。您可以将此标识符用于第三方
时区浮动(最小值:-24)(最大值:24)
此人当前时区与 UTC 的偏移量
token_for_business 字符串
在企业应用程序中相同的令牌。访问这个 令牌要求此人登录到您的应用程序。这个令牌 如果拥有该应用的企业发生变化,将会发生变化
updated_time 日期时间
更新时间
shared_login_upgrade_required_by日期时间
共享登录需要升级到商务管家的时间 由
已验证 bool
表示帐户是否已通过验证。这不同于 is_verified 字段。如果某人采取任何 以下操作:
Register for mobile Confirm their account via SMS Enter a valid credit card
video_upload_limits VideoUploadLimits
视频上传限制
viewer_can_send_gift bool
观众可以给这个人送礼物吗?
网站字符串
此人的网站
工作清单
一个人的工作经历的细节
public_key 字符串
此人的 PGP 公钥
封面封面照片
此外,这是当前的“Edge”内容:“Edge”内容的格式大致是这样的,我很快就做到了:
“边缘”
“说明”
favorite_requests
开发者最喜欢的 Graph API 请求
request_history
开发者的 Graph API 请求历史
帐户
此人管理/是其管理员的 Facebook 主页
成就
在 Facebook 游戏中取得的成就
广告帐户
此人有权访问的广告帐户
广告帐户组
广告帐户组
广告合同
此人的广告合同
admined_groups
将用户管理员分组
广告网络分析
此人的 Audience Network 应用的洞察数据
专辑
此人创建的相册
应用程序
此人来自应用的待处理请求
apprequestformerrecipients
应用请求
书籍
此人的个人资料中列出的书籍
域
用户管理的域
事件
此人的事件。默认情况下,这不包括事件 此人已拒绝或未回复
家庭
此人的家庭关系。
stream_filters
可应用于动态消息边缘的过滤器列表
好友列表
此人的自定义好友列表
ids_for_business
企业实体可以使用 业务经理。此边返回此用户拥有的 ID 列表 在任何其他应用中
invitable_friends
可受邀安装 Facebook Canvas 应用的好友列表
游戏
此人喜欢的游戏
群组
此人所属的 Facebook 群组
点赞
此人喜欢的所有页面
电影
此人喜欢的电影
音乐
此人喜欢的音乐
对象
对象
权限
此人授予此应用的权限
照片
此人被标记或已上传的照片
图片
此人的个人资料图片
tagged_places
此人的已标记地点列表。它可以包括视频标签, 帖子、状态或链接
promotable_domains
用户可以推广的所有域
promotable_events
用户可以推广的所有事件。
taggable_friends
可以在通过 Graph API 发布的内容中标记的朋友
电视
此人喜欢的电视节目
视频
此人被标记或上传的视频
video_broadcasts
来自此人的视频广播
应用程序
此人开发的 Facebook 应用。
签到
此人进行的签到。
饲料
帖子的提要(包括状态更新)和链接发布者 这个人。
好友请求
一个人的待处理好友请求。
朋友
一个人的朋友。
首页
一个人的 Facebook 主页提要。
收件箱
某人的 Facebook 消息收件箱。
位置
包含位置信息的帖子和照片的提要 此人已被标记。这对于构建一个有用的 该人去过的地方的年表。
共同的朋友
两个人的共同好友列表。
通知
一个人拥有的未读 Facebook 通知。
发件箱
某人的 Facebook 消息发件箱。
问题
一个人提出的问题。
分数
此人从 Facebook Games 获得的分数 玩过。
订阅者
关注此人的个人资料。
订阅
此人关注的个人资料。
【讨论】:
感谢到目前为止的帮助,但是 swift 的语法不起作用。我尝试了参数:[“字段”:[“id”,“生日”,“图片”],但这也不起作用 这就是我改变答案的原因,现在试试吧 没有你试过你说的这个:["fields" : ["id", "birthday", "picture"] 这不是答案所显示的 哦,这里有误会。我首先尝试了更新的答案。没看过原答案。然后我在我的评论中尝试了一个作为替代品。两者都不起作用。 我在代码中放了适量的括号,只是在我的评论中打错了。【参考方案2】:使用“字段”作为键,然后用逗号分隔您的值
let params = ["fields": "email, friends"]
【讨论】:
东西坏了,我收不到邮件 @adubey 你收到邮件了吗? 是的,我做到了。发现这是 Facebook 方面的问题。我登录时在 Facebook 上创建的帐户,他们没有我的电子邮件,所以当我检索它时,我什么也没得到。我现在创建了新帐户,所以它可以工作了。 电子邮件在 facebook 系统中可以为空。仅供参考。【参考方案3】:在 Obj-C 中插入 logInWithReadPermissions 方法:
parameters:@@"fields": @"id, name, email"
如果您在参数中保留 nil,您只会在结果对象中收到 id 和 name,尽管您已经设置了例如:
NSArray *permissionsArray = @[ @"email", @"public_profile"];
文档中不是很清楚,希望对您有所帮助。
【讨论】:
【参考方案4】:我遇到了同样的问题,但是在获取用户照片时添加字段选项会产生请求错误。我通过在代码中添加一个简单的parameters:@@"fields": @""
解决了这个问题:
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"me/picture"]
parameters:@@"fields": @""
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error)
if (!error)
// success
else
// fail
];
【讨论】:
【参考方案5】:在 Swift 中,你可以像这样声明多个参数:
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])
【讨论】:
以上是关于Facebook Graph API GET 请求 - 应包含“字段”参数(Swift,Facebook SDK v4.5.1)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 facebook graph api 请求中使用 cURL
Instagram Graph Api 为最近的媒体 GET 请求返回空数据