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

2020/11/30 22:52 · ios ·  · 0评论

我的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"])
本文地址:http://ios.askforanswer.com/facebook-graph-api-getqingqiu-yingbaohanziduancanshuswiftfacebook-sdk-v4-5-1.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!