Ios 在注册解析后端(Swift)时获取Facebook个人资料图片
我正在使用Parse作为后端服务创建一个应用程序。我的用户应该能够通过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
@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()
}
}
}
}
谢谢你的回答,但实际上我已经知道了。现在我自己解决了。谢谢你的回答,但事实上我已经知道了。现在我自己解决了。