Ios 在注册解析后端(Swift)时获取Facebook个人资料图片

Ios 在注册解析后端(Swift)时获取Facebook个人资料图片,ios,facebook,swift,facebook-graph-api,parse-platform,Ios,Facebook,Swift,Facebook Graph Api,Parse Platform,我正在使用Parse作为后端服务创建一个应用程序。我的用户应该能够通过Facebook注册和登录 我在下面做了这件事(效果非常好) @iAction func注册器与Facebook(发件人:UIButton){ let权限:[String]=[“用户关于我”、“用户关系”、“公共配置文件”] PFFacebookUtils.logInWithPermissions(权限{ (用户:PFUser!,错误:NSError!)->在中无效 如果用户==nil{ NSLog(“哦,用户取消了Faceb

我正在使用Parse作为后端服务创建一个应用程序。我的用户应该能够通过Facebook注册和登录

我在下面做了这件事(效果非常好)

@iAction func注册器与Facebook(发件人:UIButton){
let权限:[String]=[“用户关于我”、“用户关系”、“公共配置文件”]
PFFacebookUtils.logInWithPermissions(权限{
(用户:PFUser!,错误:NSError!)->在中无效
如果用户==nil{
NSLog(“哦,用户取消了Facebook登录。”)
}否则,如果user.isNew{
NSLog(“用户注册并通过Facebook登录!”)
self.loadData()
self.performsguewithidentifier(“initialToMain”,发送方:self)
}否则{
NSLog(“用户通过Facebook登录!”)
self.performsguewithidentifier(“initialToMain”,发送方:self)
}
})
}
func loadData(){
let request:FBRequest=FBRequest.requestForMe()
request.startWithCompletionHandler{(连接:FBRequestConnection!,结果:AnyObject!,错误:NSError!)->中的Void
如果错误==nil{
如果让dict=结果为字典{
让name:String=dict[“name”]作为任何对象?作为字符串
让email:String=dict[“email”]作为任何对象?作为字符串
println(名称)
PFUser.currentUser().setValue(名称,forKey:“用户名”)
PFUser.currentUser().setValue(电子邮件,forKey:“电子邮件”)
PFUser.currentUser().save()
}
}
}
}

不幸的是,我无法从正在注册的用户那里获得个人资料图片。如何才能做到这一点?

该图片可通过以下url的用户id公开获取:

https://graph.facebook.com/USER_ID/picture
您还可以要求各种尺寸:

https://graph.facebook.com/USER_ID/picture?width=300&height=300

该图片可通过以下url的用户id公开获取:

https://graph.facebook.com/USER_ID/picture
您还可以要求各种尺寸:

https://graph.facebook.com/USER_ID/picture?width=300&height=300

以下是可行的解决方案:

    func loadData(){
    let request:FBRequest = FBRequest.requestForMe()
    request.startWithCompletionHandler { (connection:FBRequestConnection!, result:AnyObject!, error:NSError!) -> Void in
        if error == nil{
            if let dict = result as? Dictionary<String, AnyObject>{
                let name:String = dict["name"] as AnyObject? as String
                let facebookID:String = dict["id"] as AnyObject? as String
                let email:String = dict["email"] as AnyObject? as String

                let 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().setObject(picture, forKey: "profilePicture")
                        PFUser.currentUser().saveInBackground()
                    }
                    else {
                        println("Error: \(error.localizedDescription)")
                    }
                })
                PFUser.currentUser().setValue(name, forKey: "username")
                PFUser.currentUser().setValue(email, forKey: "email")
                PFUser.currentUser().saveInBackground()
            }
        }
    }
}
func loadData(){
let request:FBRequest=FBRequest.requestForMe()
request.startWithCompletionHandler{(连接:FBRequestConnection!,结果:AnyObject!,错误:NSError!)->中的Void
如果错误==nil{
如果让dict=结果为字典{
让name:String=dict[“name”]作为任何对象?作为字符串
让facebookID:String=dict[“id”]作为任何对象?作为字符串
让email:String=dict[“email”]作为任何对象?作为字符串
让pictureURL=”https://graph.facebook.com/\(facebookID)/picture?类型=大并返回\u ssl\u资源=1“
var URLRequest=NSURL(字符串:pictureURL)
var urlRequestRequired=NSURLRequest(URL:URLRequest!)
NSURLConnection.sendAsynchronousRequest(需要URLrequestRequired,队列:NSOperationQueue.mainQueue(),completionHandler:{(响应:NSURLResponse!,数据:NSData!,错误:NSError!)->中的Void
如果错误==nil{
var picture=PFFile(数据:数据)
PFUser.currentUser().setObject(图片,forKey:“profilePicture”)
PFUser.currentUser().savenbackground()
}
否则{
println(“错误:\(Error.localizedDescription)”)
}
})
PFUser.currentUser().setValue(名称,forKey:“用户名”)
PFUser.currentUser().setValue(电子邮件,forKey:“电子邮件”)
PFUser.currentUser().savenbackground()
}
}
}
}

以下是可行的解决方案:

    func loadData(){
    let request:FBRequest = FBRequest.requestForMe()
    request.startWithCompletionHandler { (connection:FBRequestConnection!, result:AnyObject!, error:NSError!) -> Void in
        if error == nil{
            if let dict = result as? Dictionary<String, AnyObject>{
                let name:String = dict["name"] as AnyObject? as String
                let facebookID:String = dict["id"] as AnyObject? as String
                let email:String = dict["email"] as AnyObject? as String

                let 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().setObject(picture, forKey: "profilePicture")
                        PFUser.currentUser().saveInBackground()
                    }
                    else {
                        println("Error: \(error.localizedDescription)")
                    }
                })
                PFUser.currentUser().setValue(name, forKey: "username")
                PFUser.currentUser().setValue(email, forKey: "email")
                PFUser.currentUser().saveInBackground()
            }
        }
    }
}
func loadData(){
let request:FBRequest=FBRequest.requestForMe()
request.startWithCompletionHandler{(连接:FBRequestConnection!,结果:AnyObject!,错误:NSError!)->中的Void
如果错误==nil{
如果让dict=结果为字典{
让name:String=dict[“name”]作为任何对象?作为字符串
让facebookID:String=dict[“id”]作为任何对象?作为字符串
让email:String=dict[“email”]作为任何对象?作为字符串
让pictureURL=”https://graph.facebook.com/\(facebookID)/picture?类型=大并返回\u ssl\u资源=1“
var URLRequest=NSURL(字符串:pictureURL)
var urlRequestRequired=NSURLRequest(URL:URLRequest!)
NSURLConnection.sendAsynchronousRequest(需要URLrequestRequired,队列:NSOperationQueue.mainQueue(),completionHandler:{(响应:NSURLResponse!,数据:NSData!,错误:NSError!)->中的Void
如果错误==nil{
var picture=PFFile(数据:数据)
PFUser.currentUser().setObject(图片,forKey:“profilePicture”)
PFUser.currentUser().savenbackground()
}
否则{
println(“错误:\(Error.localizedDescription)”)
}
})
PFUser.currentUser().setValue(名称,forKey:“用户名”)
PFUser.currentUser().setValue(电子邮件,forKey:“电子邮件”)
PFUser.currentUser().savenbackground()
}
}
}
}

谢谢你的回答,但实际上我已经知道了。现在我自己解决了。谢谢你的回答,但事实上我已经知道了。现在我自己解决了。