1
這是完美的工作,直到swift 2.2和iOS 9,但在Swift 3.0中所做的更改後,我無法獲取姓名,電子郵件和fbid。這是因爲任何結果都會出現而無法從結果中提取數據。我的代碼是像下面的SWIFT 3.0如何從ios 10中的FBGraphApi的結果中提取數據
func signInWithFB(_ forVC:UIViewController , sucess:@escaping signInSuccessBlock , falure:@escaping SignInFailureBlock)
{
let obj_facebook = FBSDKLoginManager()
obj_facebook.loginBehavior = .native
obj_facebook.logIn(withReadPermissions: ["public_profile","email","user_friends"], from: forVC) { (result:FBSDKLoginManagerLoginResult?, error:Error?) -> Void in
if ((error) != nil)
{
falure(error as NSError?, false)
}
else if ((result?.isCancelled) == true)
{
falure(nil, true)
}
else
{
let dicLoginData = NSMutableDictionary()
let request = FBSDKGraphRequest(graphPath: "/me?fields=name,email,gender,hometown,education,location,first_name,last_name", parameters: nil)
let _ =
request?.start(completionHandler: { (Connection:FBSDKGraphRequestConnection?, result:Any!, error:Error?) -> Void in
if error == nil
{
dicLoginData.setValue((result as AnyObject).value(forKey: "name"), forKey: "name")
dicLoginData.setValue((result as AnyObject).value(forKey: "email"), forKey: "email")
dicLoginData.setValue((result as AnyObject).value(forKey: "gender"), forKey: "Gender")
dicLoginData.setValue((result as AnyObject).value(forKey: "last_name"), forKey: "lname")
dicLoginData.setValue((result as AnyObject).value(forKey: "first_name"), forKey: "fname")
let faceBookID:String = (result as AnyObject).value(forKey: "id") as! String
let proPicUrl = String(format:"https://graph.facebook.com/%@/picture?type=large", faceBookID)
dicLoginData.setValue(faceBookID, forKey: "facebookId")
dicLoginData.setValue(proPicUrl, forKey: "proPicURL")
// dicLoginData.setValue(strLoaction?.first, forKey: "City")
sucess(dicLoginData)
}
else
{
falure(error as NSError?, false)
}
})
}
}
}
請檢查編輯的答案,我錯誤地使用了結果而不是fbDic裏面的if if塊。 –