Obtenga un correo electrónico y nombre Facebook SDK v4.4.0 Swift
facebook-sdk-4.0 (7)
facebook ios sdk obtener el nombre de usuario y el correo electrónico rápido 3
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil) {
let fbDetails = result as! NSDictionary
print(fbDetails)
} else {
print(error?.localizedDescription ?? "Not found")
}
})
TL; TR: ¿Cómo obtengo el correo electrónico y el nombre de un usuario que ha iniciado sesión en mi aplicación utilizando el Facebook SDK 4.4?
Hasta ahora he logrado que el inicio de sesión funcione, ahora puedo obtener el token de acceso actual desde cualquier lugar de la aplicación.
Cómo tengo mi controlador de vista de inicio de sesión y el botón de inicio de sesión de Facebook configurado:
class LoginViewController: UIViewController, FBSDKLoginButtonDelegate {
@IBOutlet weak var loginButton: FBSDKLoginButton!
override func viewDidLoad() {
super.viewDidLoad()
if(FBSDKAccessToken.currentAccessToken() == nil)
{
print("not logged in")
}
else{
print("logged in already")
}
loginButton.readPermissions = ["public_profile","email"]
loginButton.delegate = self
}
//MARK -FB login
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
//logged in
if(error == nil)
{
print("login complete")
print(result.grantedPermissions)
}
else{
print(error.localizedDescription)
}
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
//logout
print("logout")
}
Ahora, en mi vista principal, puedo obtener el token de acceso así:
let accessToken = FBSDKAccessToken.currentAccessToken()
if(accessToken != nil) //should be != nil
{
print(accessToken.tokenString)
}
Cómo obtengo el nombre y el correo electrónico del usuario que inició sesión, veo muchas preguntas y respuestas usando eather un SDK anterior o usando Objective-C.
El marco parece estar actualizado y la forma en que funcionó para mí es esta:
import FacebookCore
let graphRequest: GraphRequest = GraphRequest(graphPath: "me", parameters: ["fields":"first_name,email, picture.type(large)"], accessToken: accessToken, httpMethod: .GET)
graphRequest.start({ (response, result) in
switch result {
case .failed(let error):
print(error)
case .success(let result):
if let data = result as? [String : AnyObject] {
print(data)
}
}
})
En Swift, puede realizar una solicitud de gráfico (como se muestra en @RageCompex) desde la devolución de llamada didCompleteWithResult
del botón de inicio de didCompleteWithResult
.
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
{
print(result.token.tokenString) //YOUR FB TOKEN
let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: result.token.tokenString, version: nil, HTTPMethod: "GET")
req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
if(error == nil)
{
print("result /(result)")
}
else
{
print("error /(error)")
}
})
}
He usado fields
en Android, así que pensé probarlo en iOS también, y funciona.
let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
if(error == nil)
{
print("result /(result)")
}
else
{
print("error /(error)")
}
})
resultado se imprimirá:
result{
email = "[email protected]";
id = 123456789;
name = "Your Name";
}
Encontró que estos campos son iguales al punto final del User
, vea este enlace donde puede ver todos los campos que puede obtener.
Para Swift 3 y Facebook SDK 4.16.0:
func getFBUserInfo() {
let request = GraphRequest(graphPath: "me", parameters: ["fields":"email,name"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: FacebookCore.GraphAPIVersion.defaultVersion)
request.start { (response, result) in
switch result {
case .success(let value):
print(value.dictionaryValue)
case .failed(let error):
print(error)
}
}
}
e imprimirá:
Optional(["id": 1xxxxxxxxxxxxx, "name": Me, "email": @gmail.com])
puede usar este código para obtener el correo electrónico, el nombre y la imagen de perfil del usuario
@IBAction func fbsignup(_ sender: Any) {
let fbloginManger: FBSDKLoginManager = FBSDKLoginManager()
fbloginManger.logIn(withReadPermissions: ["email"], from:self) {(result, error) -> Void in
if(error == nil){
let fbLoginResult: FBSDKLoginManagerLoginResult = result!
if( result?.isCancelled)!{
return }
if(fbLoginResult .grantedPermissions.contains("email")){
self.getFbId()
}
} }
}
func getFbId(){
if(FBSDKAccessToken.current() != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id,name , first_name, last_name , email,picture.type(large)"]).start(completionHandler: { (connection, result, error) in
guard let Info = result as? [String: Any] else { return }
if let imageURL = ((Info["picture"] as? [String: Any])?["data"] as? [String: Any])?["url"] as? String {
//Download image from imageURL
}
if(error == nil){
print("result")
}
})
}
}
let request = GraphRequest.init(graphPath: "me", parameters: ["fields":"first_name,last_name,email, picture.type(large)"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: FacebookCore.GraphAPIVersion.defaultVersion)
request.start({ (response, requestResult) in
switch requestResult{
case .success(let response):
print(response.dictionaryValue)
case .failed(let error):
print(error.localizedDescription)
}
})