获取 Facebook API 个人资料图片 ios Swift

Posted

技术标签:

【中文标题】获取 Facebook API 个人资料图片 ios Swift【英文标题】:Get Facebook API Profile Picture ios Swift 【发布时间】:2016-05-24 12:33:36 【问题描述】:

我有兴趣从用户的 fb 个人资料中获取以下信息:

    电子邮件 姓名 头像链接 年龄

为此,我使用以下代码:

let accessToken = FBSDKAccessToken.currentAccessToken()
    let req = FBSDKGraphRequest(graphpath: "me", parameters: ["fields":"picture.redirect(false),email,name,gender,age_range,birthday"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
    req.startWithCompletionHandler( (connection, result, error : NSError!) -> Void in
        if(error == nil)
        
            print("result \(result)")
        
        else
        
            print("error \(error)")
        
    )    

这会返回:

result 
"age_range" =     
    min = 21;
;
email = "dedewdd@gmail.com";
gender = male;
id = xxxxxxxxxxxx;
name = "John Smith";
picture =     
    data =         
        "is_silhouette" = 0;
        url = "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/dwqdwddqwdwqdw";
    ;
;

这个问题是这个图像是 50X50 像素,我想获得一个更大图像的链接。

【问题讨论】:

【参考方案1】:

所以我使用 Kingfisher 下载图像,但本质上 NSURL 是获得更大图像的关键。如果这不起作用,请尝试将 url 中的“50x50”更改为“250x250”,看看是否有效

if FBSDKAccessToken.currentAccessToken() != nil 

let userID = FBSDKAccessToken.currentAccessToken().userID

if(userID != nil) //should be != nil

print(userID)


let URL = NSURL(string: "http://graph.facebook.com/\(userID)/picture?type=large")!

profileImage.kf_setImageWithURL(URL)

else



【讨论】:

【参考方案2】:

试试这个,希望对你有帮助!!

@IBAction func FacebookLogin(sender: AnyObject) 

    var message = String()
    if Reachability.isConnectedToNetwork() == true 

        let loginView : FBSDKLoginManager = FBSDKLoginManager()
        loginView.loginBehavior = FBSDKLoginBehavior.Web

        if (FBSDKAccessToken .currentAccessToken() != nil) 
            loginView.logOut()
        else

            loginView.logInWithReadPermissions(["email","public_profile"], fromViewController: self, handler:  (result:FBSDKLoginManagerLoginResult!, error:NSError!) in

                if (error != nil)
                    print("Login Process Eroor!"+error.localizedDescription)
                else if result.isCancelled
                    print("User cancled Login")
                else
                    print("Login Success")
                    if result.grantedPermissions .contains("email")
                        self.fetchUserInfo()
                    else
                         message = message.stringByAppendingString("Facebook email permission error")
                        WebService.ShowToastMessage(message, viewcontroller: self)
                    
                
            )
        

     else 
        message = message.stringByAppendingString("Make sure your device is connected to the internet.")
        WebService.ShowToastMessage(message, viewcontroller: self)
    

func fetchUserInfo() -> Void 

    if (FBSDKAccessToken .currentAccessToken() != nil) 
        let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id,gender,birthday,email,name,picture.width(480).height(480)"])
        graphRequest.startWithCompletionHandler( (connection, result, error) -> Void in

            if ((error) != nil)
            
                print("Error: \(error.localizedDescription)")
            
            else
            
                print("fetched user: \(result)")
                let id : NSString = result.valueForKey("id") as! String
                let name:NSString = result.valueForKey("name") as! String
                let gender:NSString = result.valueForKey("gender") as! String
                let email:NSString = result.valueForKey("email") as! String
                print("User ID is: \(id)")
                print("User email is:\(email)")
                print("User name is :\(name)")
                print("User gender is :\(gender)")

            
        )
    

【讨论】:

如果您查看我发布的 JSON 响应,您将如何从 age_range 中提取最小值和最大值?【参考方案3】:

根据 facebook 文档

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

您可以传递图像的宽度和高度,以下是参数列表..

所以你可以尝试类似 ..

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@ @"fields" : @"id,name,picture.width(100).height(100)"]startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 

]

【讨论】:

【参考方案4】:

使用此代码通过一个请求获取用户 ID、姓名和头像:https://***.com/a/45462114/1168602

在 xcode 8.3.3 上测试

【讨论】:

以上是关于获取 Facebook API 个人资料图片 ios Swift的主要内容,如果未能解决你的问题,请参考以下文章

Facebook API - 如何通过 Facebook API 获取 Facebook 用户的个人资料图片(无需用户“允许”应用程序)

无需 facebook api 或 facebook sdk 即可获取 facebook 数字 ID 和个人资料图片

将 ios 或 Android 应用程序中的图像设置为 Facebook 个人资料图片(使用 Facebook API)[重复]

ios、facebook 和获取个人资料图片

使用 javascript SDK 从 facebook graph api 获取个人资料图片

如何在统一引擎中从 Facebook API 获取用户名和用户个人资料图片?