Facebook Graph API GET请求 – 应该包含“fields”参数(Swift,Facebook SDK v4.5.1)
我的iOS应用程序在注册过程中使用Facebook的graphicsAPI请求获取用户信息,在升级到Facebook最新的SDK之前,这些信息运行良好。 升级之后,我得到一个运行时错误,指出:“FBSDKLog:从Graph API v2.4开始,对/ us的GET请求应该包含显式的”fields“参数。
这里是代码:
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之前运行得很好,但是我不知道现在做什么改变。 非常感谢任何能够帮助我的人!
这一行需要一个不为零的参数值
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
例如,我将扩展更多,这是伪代码的种类:
所以对于ObjC来说,就是这样,例如,所以上面的内容将会是:
parameters:@{@"fields": @"id, name"}
在迅速,这将是类似的东西
像这样的东西:
parameters:["fields": "email"]
这只是两个字段,再次是伪代码,但是您需要指定参数
更新:
即时通讯添加此更新,以显示其中您可以find上述字段的参数的人,这里有一个快速链接:
这里的参数字段信息(这应该保持大致静态与FBSDK,其中一些是“核心”,这意味着它不会真的改变那么多,但我会更新,只要我可以):
https://developers.facebook.com/docs/graph-api/reference/user
以下信息的格式如下所示,我只是这么做了:
“参数” “types”
“描述”
id数字string
此人的用户帐户的ID。 此ID对每个应用程序都是唯一的,不能在不同的应用程序中使用。 我们的升级指南提供了关于特定于应用的ID的更多信息
关于string
此人的个人资料的“关于我”部分
age_range AgeRange
这个人的年龄段表示为最小和最大年龄。 比如18以上,不到21。
生物串
该人的生物
生日string
这个人的生日 这是一个固定的格式string,如MM / DD / YYYY。 然而,人们可以控制谁可以看到他们出生的那一年,这个string可以是年份(YYYY)或月份+date(MM / DD)
上下文 UserContext
这个人的社会背景
货币货币
该人的当地货币信息
设备列表
该用户正在使用的设备列表。 这将只返回iOS和Android设备
教育名单
这个人的教育
邮件string
该人的个人资料中列出的主要电子邮件地址。 如果没有有效的电子邮件地址,则不会返回此字段
favorite_athletes列表
运动员的人喜欢
favorite_teams列表
运动队的人喜欢
first_namestring
这个人的名字
性别string
男性或女性select的性别。 如果性别设置为自定义值,则此值将被忽略
家乡
这个人的家乡
励志人物名单
这个人的励志人物
install_type枚举
安装types
安装布尔
应用程序是否安装了该请求?
interested_in名单
这个人感兴趣的性别
is_shared_login布尔
这是一个共享login(例如灰色的用户)
is_verified布尔
拥有大量追随者的人可以通过Facebook手动validation其身份的真实性。 该栏位表示是否以此方式validation此人的个人资料。 这与已validation的字段不同
语言列表
代表这个人知道的语言的Facebook页面
姓氏string
该人的姓氏
链接string
指向该人的时间轴的链接
位置页面
他们在他们的个人资料中input的当前位置。 该字段与签入无关
区域设置string
该人的语言环境
meeting_for名单
这个人有兴趣见面
** middle_namestring
这个人的中间名
名称string
这个人的全名
CoreDefault
name_formatstring
该人的姓名格式正确处理中文,日文或韩文订购
payment_pricepoints PaymentPricepoints
该人的付款价格点
test_group unsigned int32
平台testing组
政治string
这个人的政治观点
relationship_statusstring
该人的关系状态
宗教string
这个人的宗教信仰
security_settings SecuritySettings
安全设定
significant_other用户
这个人的重要的其他
体育列表
运动这个人喜欢
引号string
这个人最喜欢的引号
third_party_idstring
一个string,包含一个匿名但唯一的标识符。 您可以将此标识符与第三方一起使用
timezone float(min:-24)(max:24)
该人当前的时区与UTC的偏移量
token_for_businessstring
一个令牌在整个企业的应用程序中是相同的。 访问此令牌需要该人login到您的应用程序。 如果拥有该应用程序的业务发生变化,此令牌将会更改
updated_time datetime
更新时间
shared_login_upgrade_required_by datetime
共享login需要升级到Business Manager的时间
经过validation的布尔
指示帐户是否已经过validation。 这与is_verified字段不同。 如果他们采取以下任何行动,则认为有人被validation:
Register for mobile Confirm their account via SMS Enter a valid credit card
video_upload_limits VideoUploadLimits
video上传限制
viewer_can_send_gift布尔
观众可以给这个人送礼物吗?
网站string
该人的网站
工作清单
一个人的工作经验的细节
public_keystring
该人的PGP公钥
封面 CoverPhoto
另外,这里是目前的“边缘”的东西:“边缘”的东西的格式是这样的,粗略地说,我很快做到了这一点:
“边缘”
“描述”
favorite_requests
开发者最喜欢的graphicsAPI请求
request_history
开发者的图表API请求历史
账户
Facebook的这个人pipe理/是一个pipe理员
成就
在Facebook游戏中取得的成就
adaccounts
此人有权访问的广告帐户
adaccountgroups
广告帐户组
adcontracts
该人的广告合同
admined_groups
分组用户pipe理员
adnetworkanalytics
了解该用户的受众群体networking应用的数据
专辑
这个人创build的相册
apprequests
这个人的未决请求从一个应用程序
apprequestformerrecipients
应用请求
图书
这个人的个人资料上列出的书籍
域
用户pipe理的域
事件
这个人的事件。 默认情况下,这不包括该人已拒绝或未回复的事件
家庭
这个人的家庭关系。
stream_filters
可应用于新闻Feed边缘的filter列表
好友列表
该人的自定义朋友列表
ids_for_business
业务实体可以使用业务pipe理器声明多个应用程序的所有权。 此边缘将返回此用户在其他任何应用程序中拥有的ID列表
invitable_friends
可邀请安装Facebook Canvas应用程序的朋友列表
游戏
这个人喜欢的游戏
组
该用户所属的Facebook群组
喜欢
所有这个人都喜欢的页面
电影
这个人喜欢的电影
音乐
这个人喜欢的音乐
对象
对象
权限
该用户授予此应用的权限
相片
该人被加了标签或上传了照片
图片
该人的个人资料图片
tagged_places
此人的标记地点列表。 它可以在video,post,状态或链接上包含标签
promotable_domains
所有域用户都可以推广
promotable_events
用户可以提升的所有事件。
taggable_friends
可以通过Graph API发布内容的朋友
电视
电视节目这个人喜欢
video
该人被标记或上传的video
video_broadcasts
来自这个人的video广播
应用
这个人是开发者的Facebook应用程序。
签入
签入此人已经。
饲料
post的提要(包括状态更新)和此人发布的链接。
friendrequests
一个人的待处理的朋友请求。
朋友
一个人的朋友。
家
一个人的Facebook主页Feed。
收件箱
一个人的Facebook消息收件箱。
地点
包含位置信息的post和照片的供稿,以及此人的标签。 这对于构build该人所访问的地点的年代表是有用的。
共同的朋友
两个人之间的共同的朋友名单。
通知
一个人有未读的Facebook通知。
发件箱
一个人的Facebook消息发件箱。
问题
一个人创造的问题。
分数
这个人从他们玩过的Facebook游戏中得到的分数。
用户
跟随此人的个人资料。
subscribedto
这个人正在关注的个人资料。
使用“字段”作为密钥,然后逗号分隔您的值
let params = ["fields": "email, friends"]
在Obj-C中插入logInWithReadPermissions方法:
parameters:@{@"fields": @"id, name, email"}
如果您在参数中保留nil,则只会在结果对象中收到id和name,尽pipe您已经设置了例如:
NSArray *permissionsArray = @[ @"email", @"public_profile"];
文件中不太清楚,希望能帮到你。
我有同样的问题,但添加字段选项会导致提取用户照片时的请求错误。 我通过在代码中添加一个简单的parameters:@{@"fields": @""}
来解决这个问题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 }} ];
在Swift中,你可以像这样声明多个参数:
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])