当前位置: 首页 > 面试题库 >

Facebook Graph API GET请求-应包含“字段”参数(Swift,Facebook SDK v4.5.1)

厉文栋
2023-03-14
问题内容

我的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

对用户管理员进行分组

广告网络分析

该人的Audience Network应用的见解数据

专辑

此人创建的相册

要求

此人的某个应用程序的待处理请求

申请者的收件人

应用程式要求

图书

此人的个人资料上列出的书

用户管理的域

大事记

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

家庭

此人的家庭关系。

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游戏中获得的分数。

订户

该人的个人资料。

订阅

The profile that this person is following.



 类似资料:
  • 问题内容: 我的应用程序中有一个奇怪的异常,我想记录它发生的时间,并包括完整的请求字符串(包括参数)。 当我尝试 我得到了请求字符串,但没有得到包含的参数?和&。 例: 我只看到 我可以把整个字符串放在某个地方吗? 问题答案: 参见HttpServletRequest#getQueryString() 如果需要整个字符串,则必须将请求url和查询字符串附加在一起,因为没有方法可以获取整个字符串。

  • 问题内容: 我是新手,所以我的代码可能会出现很多错误,但是我要实现的目标是将GET请求发送到带有 参数的服务器。鉴于我的函数有两个参数,我试图做到更多。我不确定如何将两者结合到实际的URLRequest中?到目前为止,这是我尝试过的 问题答案: 建立请求时,请求的主体没有,但是所有内容都放在URL上。要构建网址(并正确地将其转义), 您还可以使用. 唯一的窍门是,大多数Web服务都需要+转义字符百

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 我知道ICMP请求包含IP地址。客户机MAC地址是否包含在ICMP请求中?ping请求中还包括哪些其他信息(如果有的话)?

  • 我正在尝试使用RestTemplate将外部API集成到我的Spring MVC应用程序中。 除非我不必将JSON作为请求参数传递给API调用,否则它工作得非常好。这样的尝试每次都会导致,就我在API日志中查看的情况而言,我的JSON参数没有被API解码(它看起来仍然像编码字符串)。 我认为它可能与我请求中的标头有关,但一旦我添加了和,错误仍然相同。有人能给我一个建议我的实现可能有什么问题吗? 事