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"])