Facebook iOS SDK 用户配置文件登录属性

Posted

技术标签:

【中文标题】Facebook iOS SDK 用户配置文件登录属性【英文标题】:Facebook iOS SDK User Profile Login Attributes 【发布时间】:2015-07-15 20:15:20 【问题描述】:

我已将我的项目配置为使用 Facebook SDK 进行登录。我正在使用以下框架:

FBSDKShareKit
FBSDKLoginKit
FBSDKCoreKit

我在一个 swift 项目中使用它,所以我添加了桥接头,将我的所有框架导入到头中,并在 facebook 开发人员网站上注册项目后使用应用程序 ID 正确配置了属性列表。我还在 AppDelegate 方法中添加了必要的代码。

我的登录代码如下所示:

if(FBSDKAccessToken.currentAccessToken() != nil)   
            returnUserData()
        

        else


            let loginView  = FBSDKLoginButton()
            loginView.center = view.center
            loginView.readPermissions = ["public_profile", "email", "user_friends"]
            loginView.delegate = self
            view.addSubview(loginView)
        

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 
        if ((error) != nil)
            //Process error
            println(error.localizedDescription)
        

        else if result.isCancelled
            //Handle cancellations
        

        else

            println(result.token.description)
            //If you ask for multiple permissions you should check if
            //specific permissions are missings.
            if result.grantedPermissions.contains("email")
                returnUserData()
            
        
    

   func returnUserData ()

        let graphRequest  = FBSDKGraphRequest(graphpath: "me", parameters: nil)

        graphRequest.startWithCompletionHandler  (connection : FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
            if ((error) != nil)
            
                // Process error
                println("Error: \(error)")
            
            else
            
                let id : String = result.valueForKey("id") as! String
                self.getUserProfileWithId(id)
                let userName : NSString = result.valueForKey("name") as! String
            
        
        

https://developers.facebook.com/docs/facebook-login/permissions/v2.4

上面的链接是我所引用的文档,我应该拥有的权限。但是,当我运行请求时,我只收到来自调用的"id""name" 属性。

文档说明 public_profile(默认)应该有

*id
*name
*first_name
*last_name
*age_range
*link
*gender
*local
*timezone
*updated_time
*verified

但是我从未收到这些属性,并且我已确认我拥有使用此代码的公开个人资料的授予权限。

 if result.grantedPermissions.contains("public_profile")
                println("Permissions valid for profile")
            

我还更改了我的 facebook 帐户的设置,以便它可以搜索并且没有任何限制,但这似乎也没有效果。我尝试了一个朋友的帐户,结果是一样的,只是登录调用返回了 id 和 name 字段。 关于如何获得完整的public_profile 信息的任何帮助都会很棒

【问题讨论】:

【参考方案1】:

使用 v2.4,您必须在 fields 参数列表中请求要接收的每个字段:

https://developers.facebook.com/docs/apps/changelog#v2_4

为了尝试提高移动网络的性能,v2.4 中的节点和边缘要求您明确请求 GET 请求所需的字段。例如 GET /v2.4/me/feed 默认不再包含 likes 和 cmets,但 GET /v2.4/me/feed?fields=cmets,likes 会返回数据。有关更多详细信息,请参阅有关如何请求特定字段的文档。

【讨论】:

您能否提供一个关于如何在参数中添加fields 的示例,因为Facebook 在这方面不是很清楚?如何获取基本资料?

以上是关于Facebook iOS SDK 用户配置文件登录属性的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK 登录原生和 UIWebView 登录

适用于 iOS 的 Facebook SDK 登录

Facebook SDK for iOS 处理登录

Facebook iOS SDK 4.x:更改用户登录

无法使用测试用户通过 Facebook iOS SDK 3 登录

Facebook 登录在 IOS SDK 中不起作用