我的iOS应用程序在注册时使用Facebook的Graph API请求来获取用户信息,在升级到Facebook最新的SDK之前,该应用程序运行良好.升级后,我收到一个运行时错误,声明:"FBSDKLog:从Graph API v2.4开始,GET requests for/me应该包含一个显式的"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)

例如,我将进一步展开,这是psuedo代码:

例如,对于ObjC,它是这样的,所以上面的内容如下:

parameters:@{@"fields": @"id, name"}

在Swift ,情况也会类似

比如:

parameters:["fields": "email"]

这只适用于两个字段,也是psuedo代码,但需要指定参数


更新:

Im adding this update to show folks where you find the parameters for the fields as described above, here's a quick link:

以下是Parameters字段信息(对于FBSDK,这应该保持大致静态,其中一些是"核心",这意味着它不会真正改变太多,但我会随时更新):

https://developers.facebook.com/docs/graph-api/reference/user

下面的信息格式如下,有点,我只是很快地做到了:

"parameter" "type"

"description"

id数字字符串

此人用户帐户的id.此ID对于每个应用程序都是唯一的

about

此人个人资料中的"关于我"部分

age_range阿格朗格

此人的年龄段表示为最小值和最大值

bio

个人简历

birthday

这个人的生日.这是一个固定格式的字符串,如MM/DD/YYYY.

context用户上下文

此人的社会背景

currency

此人的当地货币信息

devices人名单

此人正在使用的设备列表.这将只返回iOS和

education人名单

人的教育

email

此人个人资料中列出的主要邮箱地址.这个领域

favorite_athletes人名单

喜欢的运动员

favorite_teams人名单

人们喜欢的运动队

first_name

此人的名字

gender

此人 Select 的性别,男性或女性.该值将为

hometown

此人的家乡

inspirational_people人名单

这个人的鼓舞人心的人

install_type枚举

安装类型

installed布尔

发出请求的应用程序是否已安装?

interested_in人名单

此人感兴趣的性别

is_shared_login布尔

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

is_verified布尔

拥有大量粉丝的人可以拥有

languages人名单

代表此人所懂语言的Facebook页面

last_name

此人的姓氏

link

指向此人时间表的链接

location

此人在其个人资料中输入的当前位置.

locale

此人所在的地区

meeting_for人名单

此人有兴趣会面的目的是什么

**中间名字符串

此人的中间名

name

此人的全名

核心违约

name_format

该人员的姓名格式应能正确处理中文、日文或英文

payment_pricepoints PaymentPricepoints

此人的支付价格点

test_group未签名int32

平台测试组

political

此人的政治观点

relationship_status

此人的关系状态

religion

此人的宗教信仰

security_settings安全设置

安全设置

significant_other用户

此人重要的另一半

sports人名单

这个人喜欢的运动

quotes

此人最喜欢的语录

third_party_id

一个字符串,其中包含

timezone浮动(最小值:-24)(最大值:24)

此人当前时区与UTC的偏移量

token_for_business

在企业应用程序中相同的令牌.访问这个

updated_time约会时间

更新时间

shared_login_upgrade_required_by约会时间

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

verified布尔

指示帐户是否已验证.这与

Register for mobile
Confirm their account via SMS
Enter a valid credit card

video_upload_limits视频上传限制

视频上传限制

viewer_can_send_gift布尔

观众能给这个人送礼物吗?

website

此人的网站

work人名单

一个人工作经历的细节

public_key

此人的PGP公钥

cover张封面照片


此外,这里是当前的"边缘"内容:"边缘"内容的格式是这样的,大致上,我很快就做到了:

"Edge"

"Description"

favorite_requests

开发者对Graph API最喜欢的请求

request_history

开发者的图形API请求历史记录

accounts

Facebook页面此人管理/是Facebook的管理员

achievements

Facebook游戏取得的成就

adaccounts

此人可以访问的广告帐户

adaccountgroups

广告帐户组

adcontracts

此人的广告合同

admined_groups

对用户管理员进行分组

adnetworkanalytics

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

albums

此人创建的相册

apprequests

此人的应用程序挂起的请求

apprequestformerrecipients

应用程序请求

books

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

domains

用户管理的域

events

为此人举办的活动.默认情况下,这不包括以下事件:

family

这个人的家庭关系.

stream_filters

可应用于新闻提要边缘的筛选器列表

friendlists

此人的自定义好友列表

ids_for_business

商业实体可以使用

invitable_friends

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

games

这个人喜欢的游戏

groups

此人所属的Facebook群组

likes

这个人喜欢的所有页面

movies

这个人喜欢的电影

music

这个人喜欢的音乐

objects

物体

permissions

此人授予此应用的权限

photos

此人被标记或上传的照片

picture

此人的个人资料图片

tagged_places

此人的标记位置列表.它可以包括视频上的标签,

promotable_domains

用户可以推广的所有域

promotable_events

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

taggable_friends

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

television

这个人喜欢的电视节目

videos

此人被标记或上传的视频

video_broadcasts

此人的视频广播

applications

此人开发的Facebook应用程序.

checkins

此人所做的判断.

feed

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

friendrequests

一个人待决的朋友请求.

friends

一个人的朋友.

home

一个人的Facebook主页提要.

inbox

一个人的Facebook信息收件箱.

locations

一个包含位置信息和

mutualfriends

两个人共同的朋友名单.

notifications

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

outbox

一个人的Facebook信息发件箱.

questions

一个人提出的问题.

scores

此人从Facebook游戏中获得的分数

subscribers

跟踪此人的个人资料.

subscribedto

此人正在关注的个人资料.

Swift相关问答推荐

如何在SwiftUI中创建具有圆角顶部和锯齿状底部边缘的自定义Shape,类似于撕破的纸?

数据不会被ARC删除在swift'

Swift UI在视图中排序不同的 struct

如何才能在同一线程上调用类中的每个方法,而不对每个调用使用同步块?

正在接收具有不完整数据错误的URL请求

从 Obj-C 函数返回 swift 类的不兼容指针类型

If 语句在 Swift 中有 2 个日期

PassthroughSubject 的 AsyncPublisher 值属性未生成所有值

标有@MainActor 的函数中的异步调用是否也在主线程上运行?

MainActor 隔离可变存储属性为何会出现可发送错误?

如何使用带有 span 样式标签的 Swift XMLParser

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

使用 Swiftui 水平修剪 Shape()

如何处理永远不会失败的 String.Encoding 初始化程序?

我们如何显示关于 UITextField 是 xCode Swift 的建议?

将项目引用添加到 Swift iOS XCode 项目并调试

在 Swift 中将两个字节的 UInt8 数组转换为 UInt16

为什么 swift 中的类没有存储类型属性?

调整文本的字体大小以适应 UIButton

try 在解除分配时加载视图控制器的视图... UIAlertController