我的iOS应用程序在注册过程中使用了Facebook的Graph API Request来获取用户信息,在升级到Facebook最新的SDK之前,它运行良好。升级后,我得到一个运行时错误,指出:“ FBSDKLog:从Graph API v2.4开始,对/ me的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"]
这仅用于两个字段,再次是伪代码,但是您需要指定参数
更新:
我添加此更新是为了向人们显示您在何处找到上述字段的参数,这是一个快速链接:
这是Paramters字段信息(对于FBSDK,它应该大致保持静态,其中一些是“核心”,这意味着它的变化不会太大,但是我会尽可能地进行更新):
https://developers.facebook.com/docs/graph-api/reference/user
下面的信息格式如下,我只是很快地做到了:
“参数” “类型”
“描述”
id数字字符串
此人的用户帐户的ID。该ID对于每个应用程序都是唯一的,不能在不同的应用程序之间使用。我们的升级指南提供了有关特定于应用的ID的更多信息
关于字符串
此人的个人资料的“关于我”部分
age_range AgeRange
此人的年龄段表示为最小和最大年龄。例如,大于18,小于21。
生物弦
这个人的简历
生日串
这个人的生日。这是固定格式的字符串,例如MM / DD / YYYY。但是,人们可以控制谁可以看到他们的出生日期,而不是月份和日期,因此此字符串只能是年份(YYYY)或月份+日期(MM / DD)
上下文UserContext
此人的社交环境
货币货币
该人的当地货币信息
设备清单
该人正在使用的设备列表。这只会返回iOS和Android设备
教育清单
人的教育
电子邮件字符串
该人的个人电子邮件地址列在其个人资料上。如果没有有效的电子邮件地址,则不会返回此字段
最喜欢的运动员列表
运动员喜欢的人
favorite_teams列表
人喜欢的运动队
first_name字符串
该人的名字
性别字符串
此人选择的性别,无论是男性还是女性。如果将性别设置为自定义值,则将忽略此值
家乡页面
这个人的家乡
spirational_people列表
这个人的鼓舞人心的人
install_type枚举
安装类型
已安装的布尔
发出请求的应用是否已安装?
兴趣清单
该人感兴趣的性别
is_shared_login布尔
这是共享登录名(例如,灰色用户)吗?
is_verified布尔
拥有大量追随者的人可以通过Facebook手动验证其身份的真实性。此字段指示是否以这种方式验证了个人资料。这与已验证的字段不同
语言清单
代表此人知道的语言的Facebook页面
last_name字符串
该人的姓氏
连结字串
到该人的时间表的链接
位置页
他们在个人资料中输入的该人的当前位置。此字段与签到无关
语言环境字符串
该人的语言环境
Meeting_for列表
该人有兴趣开会的目的
** middle_name字符串
该人的中间名
名称字符串
该人的全名
核心默认
name_format字符串
此人的姓名格式正确,可以正确处理中文,日文或韩文排序
payment_pricepoints付款价格点
该人的付款价格点
test_group无符号int32
平台测试组
政治串
这个人的政治观点
relationship_status字符串
人的关系状态
宗教串
这个人的宗教信仰
security_settings安全设置
安全设定
有意义的_其他用户
该人的重要他人
体育清单
运动这个人喜欢
引号字符串
该人的最爱报价
third_party_id字符串
一个字符串,其中包含该人的匿名但唯一的标识符。您可以将此标识符与第三方一起使用
时区浮动(最小值:-24)(最大值:24)
该人当前时区与UTC的偏移量
token_for_business字符串
在企业的应用程序中相同的令牌。要访问此令牌,需要将该人登录到您的应用程序。如果拥有该应用的企业更改,则此令牌将更改
Updated_time datetime
更新时间
shared_login_upgrade_required_by datetime
共享登录需要通过以下时间升级到Business Manager的时间
经验证的布尔
指示该帐户是否已通过验证。这与is_verified字段不同。如果有人采取以下任何措施,则认为该人已通过验证:
Register for mobile Confirm their account via SMS Enter a valid credit card
video_upload_limits VideoUploadLimits
视频上传限制
viewer_can_send_gift布尔
观众可以向这个人发送礼物吗?
网站字串
该人的网站
工作清单
一个人的工作经历的细节
public_key字符串
人的PGP公钥
封面CoverPhoto
另外,这是当前的“ Edge”素材:“ Edge”素材的格式大致如下:
“边缘”
“描述”
favorite_requests
开发人员最喜欢的Graph API请求
request_history
开发人员的Graph API请求历史记录
帐目
此人管理的Facebook页面/是该用户的管理员
成就
Facebook游戏取得的成就
帐户
此人有权访问的广告帐户
adaccountgroups
广告帐户组
广告合同
该人的广告合同
admined_groups
对用户管理员进行分组
广告网络分析
该人的受众网络应用的见解数据
专辑
此人创建的相册
要求
此人的某个应用程序的待处理请求
申请者的收件人
应用程式要求
图书
此人的个人资料上列出的书
域
用户管理的域
大事记
此人的活动。默认情况下,这不包括该人拒绝或未回复的事件
家庭
此人的家庭关系。
stream_filters
可以应用于新闻源边缘的过滤器列表
朋友清单
此人的自定义朋友列表
ids_for_business
业务实体可以使用业务管理器声明对多个应用程序的所有权。此边缘返回该用户在任何其他应用程序中拥有的ID列表
invitable_friends
可以邀请安装Facebook Canvas应用程序的朋友列表
游戏
此人喜欢的游戏
团体
该人所属的Facebook群组
喜欢
该人顶过的所有页面
电影
此人喜欢的电影
音乐
这个人喜欢的音乐
对象
对象
权限
该人已授予此应用程序的权限
相片
该人被加了标签或已上传的照片
图片
该人的个人资料图片
agged_places
此人的加标签地点清单。它可以包含视频,帖子,状态或链接上的标签
promotable_domains
用户可以推广的所有域
promotable_events
用户可以推广的所有事件。
taggable_friends
可以在通过Graph API发布的内容中标记的朋友
电视
这个人喜欢的电视节目
影片
该人被标记或上传的视频
video_broadcasts
此人的视频广播
应用领域
此人是开发者的Facebook应用程序。
签到
此人进行的签到。
饲料
此人发布的帖子(包括状态更新)和链接的提要。
朋友请求
一个人的未决朋友请求。
朋友们
一个人的朋友。
家
一个人的Facebook主页提要。
收件箱
一个人的Facebook消息收件箱。
地点
包含位置信息并已在其中标记了此人的帖子和照片的供稿。这对于构造人去过的地方的时间顺序很有用。
共同的朋友
两人之间的共同朋友列表。
通知
一个人的未读Facebook通知。
发件箱
一个人的Facebook消息发件箱。
问题
一个人提出的问题。
分数
此人从他们玩过的Facebook游戏获得的分数。
订户
该人的个人资料。
订阅
此人关注的个人资料。
使用“字段”作为键,然后用逗号分隔您的值
let params = ["fields": "email, friends"]
在Obj-C中,插入logInWithReadPermissions方法:
parameters:@{@"fields": @"id, name, email"}
如果您在参数中保留nil,则尽管在示例中进行了设置,但在结果对象中您只会收到id和name
NSArray *permissionsArray = @[ @"email", @"public_profile"];
文档中不是很清楚,希望能有所帮助。
我遇到了同样的问题,但是添加字段选项会在获取用户照片时生成请求错误。我通过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"])
文章标签:facebook , facebook-graph-api , ios , swift , xcode
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!