1
Swift 2.2とiOS 9までは完全に動作していますが、Swift 3.0で変更した後は名前、電子メール、およびfbidを取得できません。結果が出て結果からデータを抽出できないためです。私のコードは[String: Any]
にresult
オブジェクトの種類を指定し、代わりにresult["name"]
などのDictionary
での迅速な使用の添字にvalue(forKey:)
とsetValue(_:forKey)
を使用するので、このような変更を行い、迅速3.0iOSの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 let'ブロック内の結果を使用しました。 –