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)