Facebook Graph API GET请求 - 应包含"fields"参数(Swift,Facebook SDK v4.5.1)

Arm*_*min 56 xcode facebook facebook-graph-api ios swift

我的iOS应用程序在注册期间使用Facebook的Graph API请求来获取用户信息,这在升级到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)")
                }
            })
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

错误消息在以下行:

let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
Run Code Online (Sandbox Code Playgroud)

在升级到Facebook的SDK v4.5.1之前,此代码运行完全正常,但我不知道要改变什么才能使其正常工作.非常感谢能帮助我的人!

Lox*_*oxx 121

这一行需要一个非零的参数值

let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
Run Code Online (Sandbox Code Playgroud)

例如,我会扩展更多,这是伪造的代码:

所以对于ObjC来说就是这样,例如,所以上面会看到以下内容:

parameters:@{@"fields": @"id, name"}
Run Code Online (Sandbox Code Playgroud)

在swift中它会是类似的东西

这样的事情:

parameters:["fields": "email"]
Run Code Online (Sandbox Code Playgroud)

这仅适用于两个字段,而且它是psuedo代码,但您需要指定参数


更新:

我添加此更新以显示您找到上述字段参数的人员,这里是一个快速链接:

这是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_athletes列表

这个人喜欢的运动员

favorite_teams列表

这个人喜欢运动队

first_name字符串

这个人的名字

性别串

由此人选择的性别,男性或女性.如果将性别设置为自定义值,则将省略此值

家乡页

这个人的故乡

inspirational_people列表

这个人的鼓舞人心

install_type枚举

安装类型

安装 bool

应用程序是否安装了请求?

interest_in list

这个人感兴趣的性别

is_shared_login布尔

这是共享登录(例如,灰色用户)

is_verified布尔

拥有大量粉丝的人可以通过Facebook手动验证其身份的真实性.此字段指示是否以这种方式验证此人的个人资料.这与经过验证的领域不同

语言列表

Facebook页面代表了这个人所知道的语言

last_name字符串

这个人的姓氏

链接字符串

指向此人时间轴的链接

位置页

此人在其个人资料中输入的当前位置.此字段与签到无关

区域设置字符串

这个人的地方

meeting_for列表

这个人有兴趣参加会议

**middle_name字符串

这个人的中间名

名字串

这个人的全名

CoreDefault

name_format字符串

格式化为正确处理中文,日文或韩文订购的人名

payment_pricepoints PaymentPricepoints

该人的支付价格点

test_group unsigned int32

平台测试组

政治串

这个人的政治观点

relationship_status字符串

这个人的关系状况

宗教字符串

这个人的宗教信仰

security_settings SecuritySettings

安全设定

significant_other用户

这个人是重要的其他人

体育名单

体育这个人喜欢

引号字符串

这个人最喜欢的报价

third_party_id字符串

一个字符串,包含该人的匿名但唯一的标识符.您可以将此标识符与第三方一起使用

timezone float(min:-24)(最大值:24)

此人的当前时区偏离UTC

token_for_business字符串

在业务应用程序中使用相同的令牌.访问此令牌需要该人员登录您的应用程序.如果拥有应用程序的企业发生变化,此令牌将会更改

updated_time日期时间

更新时间

shared_login_upgrade_required_by datetime

共享登录需要升级到Business Manager的时间

经过验证的 bool

指示帐户是否已经过验证.这与is_verified字段不同.如果他们采取以下任何行动,则会被视为已验证:

Register for mobile
Confirm their account via SMS
Enter a valid credit card
Run Code Online (Sandbox Code Playgroud)

video_upload_limits VideoUploadLimits

视频上传限制

viewer_can_send_gift布尔

观众可以送礼物给这个人吗?

网站字符串

这个人的网站

工作清单

人`s工作经验的细节

public_key字符串

该人的PGP公钥

封面 CoverPhoto


此外,这是当前的"边缘"的东西:"边缘"的东西的格式就是这样,粗略地说,我很快就这样做了:

"边缘"

"描述"

favorite_requests

开发人员最喜欢的Graph API请求

request_history

开发人员的Graph API请求历史记录

账户

这个人管理的Facebook页面/是管理员

成就

Facebook游戏取得的成就

adaccounts

此人可以访问的广告帐户

adaccountgroups

广告帐户组

adcontracts

此人的广告合同

admined_groups

将用户管理员分组

adnetworkanalytics

洞察此人的受众网络应用的数据

专辑

这个人创建的相册

apprequests

此人正在等待应用程序的请求

apprequestformerrecipients

应用请求

图书

此人的个人资料中列出的书籍

域

用户管理的域

事件

这个人的活动.默认情况下,这不包括此人拒绝或未回复的事件

家庭

这个人的家庭关系.

stream_filters

可应用于新闻Feed边缘的过滤器列表

好友列表

该人的自定义朋友列表

ids_for_business

业务实体可以使用业务经理声明对多个应用程序的所有权.此边缘返回此用户在任何其他应用程序中具有的ID列表

invitable_friends

可以邀请安装Facebook Canvas应用程序的朋友列表

游戏

这个人喜欢的游戏

组

该人所属的Facebook群组

喜欢

这个人喜欢的所有页面

电影

这个人喜欢的电影

音乐

这个人喜欢的音乐

对象

对象

权限

此人授予此应用的权限

相片

此人被标记或已上传的照片

图片

该人的个人资料图片

tagged_places

这个人的标记的地方列表.它可以包含视频,帖子,状态或链接上的标签

promotable_domains

用户可以推广的所有域名

promotable_events

用户可以推广的所有活动.

taggable_friends

可以通过Graph API发布的内容中标记的朋友

电视

电视节目这个人喜欢

视频

该人被标记或上传的视频

video_broadcasts

这个人的视频广播

应用

这个人是开发者的Facebook应用程序.

签入

这个人签到的签到.

饲料

帖子的提要(包括状态更新)和此人发布的链接.

friendrequests

一个人待定的朋友请求.

朋友

一个人的朋友.

家

一个人的Facebook主页提要.

收件箱

一个人的Facebook消息收件箱.

地点

包含位置信息的帖子和照片供稿,此人已被标记.这对于构建该人访问过的地点的年表非常有用.

共同的朋友

两个人之间的共同朋友名单.

通知

一个人拥有的未读Facebook通知.

发件箱

一个人的Facebook消息发件箱.

问题

一个人创造的问题.

分数

这个人从他们玩过的Facebook游戏中得到的分数.

用户

跟随此人的个人资料.

subscribedto

此人关注的个人资料.


小智 26

使用"fields"作为Key,然后使用逗号分隔您的值

let params = ["fields": "email, friends"]
Run Code Online (Sandbox Code Playgroud)

  • facebook系统中的电子邮件可以为null.仅供参考. (2认同)

Jos*_*ván 12

在Obj-C中插入logInWithReadPermissions方法:

parameters:@{@"fields": @"id, name, email"}
Run Code Online (Sandbox Code Playgroud)

如果你在参数中留下nil,你只会在结果对象中收到id和name,尽管你已经设置了例如:

NSArray *permissionsArray = @[ @"email", @"public_profile"];
Run Code Online (Sandbox Code Playgroud)

在文档中不是很清楚,希望它可以帮助.


Pau*_*ros 6

我遇到了同样的问题,但添加字段选项会在获取用户照片时生成请求错误.我通过添加一个简单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
    }}
];
Run Code Online (Sandbox Code Playgroud)


dyl*_*ley 5

在Swift中,您可以这样声明多个参数:

let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])
Run Code Online (Sandbox Code Playgroud)