Ios 如何在Swift 3中获取Facebook用户id、电子邮件、picture.type(大型)
我尝试从Ios 如何在Swift 3中获取Facebook用户id、电子邮件、picture.type(大型),ios,swift,facebook,Ios,Swift,Facebook,我尝试从Facebook SDK获取用户id、电子邮件、图片。键入(大)、更新时间,我成功获取了所有内容,但没有获取图片提供给我: 错误无法调用非函数类型“Any?!”的值 下面是我的清晰代码 import UIKit import Foundation class LoginViewController : UIViewController, FBSDKLoginButtonDelegate { private var fromLogin = [
Facebook SDK
获取用户id、电子邮件、图片。键入(大)、更新时间
,我成功获取了所有内容,但没有获取图片提供给我:
错误无法调用非函数类型“Any?!”的值
下面是我的清晰代码
import UIKit
import Foundation
class LoginViewController : UIViewController, FBSDKLoginButtonDelegate {
private var fromLogin = [Login]()
@IBOutlet weak var loginButton : FBSDKLoginButton!
override func viewDidLoad() {
super.viewDidLoad()
// Check Session
if let token = FBSDKAccessToken.current(){
print(token.tokenString! as Any)
self.fetchProfile()
}
loginButton.delegate = self
loginButton.readPermissions = ["email", "public_profile"]
}
// Get Profile
func fetchProfile() {
print("fetch profile")
// Create facebook graph with fields
FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id, name, email, picture.type(large), updated_time"]).start { (connection, result, error) in
// check error
if error != nil {
// error happen
print("Failed to start graph request: \(error?.localizedDescription)")
return
}
if let userDict = result as? NSDictionary {
let name = userDict["name"] as? String
let id = userDict["id"] as? String
let email = userDict["email"] as? String
// HERE GIVES ERROR I DIDNT GET PICTURE WITH STRING
let userPicture = userDict.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as String
print(userPicture)
print(name as Any)
print(id as Any)
print(email as Any)
}
}
}
// Delegate Method
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!){
// check error
if error != nil {
// error happen
print(error?.localizedDescription as Any)
return
}
print("Successfull login in with facebook...")
fetchProfile()
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!){
print("Log Out")
}
这一行给出了错误
让userPicture=userDict.objectForKey(“图片”)?.objectForKey(“数据”)?.objectForKey(“url”)作为字符串
这里还有图片对象json数据示例
picture = {
data = {
"is_silhouette" = 0;
url = "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/14067524_9513823423422249533237851_n.jpg?oh=88eb9b80abbb2342346c01de298&oe=58C5138B";
};
};
我正在使用Xcode 8.1
和swift3.0
替换这个
FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id, name, email, picture.type(large), updated_time"]).start { (connection, result, error) in
与
然后检查这个
if let imageUrl = ((dictData.value(forKey: "picture") as? NSDictionary)?.value(forKey: "data") as? NSDictionary)?.value(forKey: "url") as? NSString
{
Facebook.imagesArr.add(imageUrl)
print("Pictureasd:",Facebook.imagesArr)
}
这需要简单的解析。。“图片”是字典,“数据”也是字典。所以下面这样的东西适合你
guard let userDict = result as? [String:Any] else { return }
let name = userDict["name"] as? String
let id = userDict["id"] as? String
let email = userDict["email"] as? String
if let picture = userDict["picture"] as? [String:Any] ,
let imgData = picture["data"] as? [String:Any] ,
let imgUrl = imgData["url"] as? String {
print(imgUrl)
}
试试下面的方法answer@User511我的代码工作只需要得到图片真正的字符串代码它有完整的代码。它对我有用。@User511 userPicture字符串在哪里?你只需要打印所有result@EICaptainv2.0你能给我一个答案吗?我会同意的it@El机长v2.0谢谢你在Xcode 8.1和Swift 3.0上工作得很好
guard let userDict = result as? [String:Any] else { return }
let name = userDict["name"] as? String
let id = userDict["id"] as? String
let email = userDict["email"] as? String
if let picture = userDict["picture"] as? [String:Any] ,
let imgData = picture["data"] as? [String:Any] ,
let imgUrl = imgData["url"] as? String {
print(imgUrl)
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
{
FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"first_name, last_name, picture.type(large)"]).start { (connection, result, error) -> Void in
let strFirstName: String = (result.object(forKey: "first_name") as? String)!
let strLastName: String = (result.object(forKey: "last_name") as? String)!
let strPictureURL: String = (result.object(forKey: "picture")?.object(forKey: "data")?.object(forKey: "url") as? String)!
self.lblName.text = "Welcome, \(strFirstName) \(strLastName)"
self.ivUserProfileImage.image = UIImage(data: try! Data(contentsOf: URL(string: strPictureURL)!))
}
}