Iam usando la última FBSDK (mediante el uso de swift)

//MARK: sign in with facebook

func signInWithFacebook()
{
    if (FBSDKAccessToken.currentAccessToken() != nil)
    {
        //User is already logged in, do work such as go to next view controller.
        println("already logged in ")
        self.returnUserData()

        return
    }
    var faceBookLoginManger = FBSDKLoginManager()
    faceBookLoginManger.logInWithReadPermissions(["public_profile", "email", "user_friends"], handler: { (result, error)-> Void in
        //result is FBSDKLoginManagerLoginResult
        if (error != nil)
        {
            println("error is \(error)")
        }
        if (result.isCancelled)
        {
            //handle cancelations
        }
        if result.grantedPermissions.contains("email")
        {
            self.returnUserData()
        }
    })
}

func returnUserData()
{
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            //Process error
            println("Error: \(error)")
        }
        else
        {
            println("the access token is \(FBSDKAccessToken.currentAccessToken().tokenString)")

            var accessToken = FBSDKAccessToken.currentAccessToken().tokenString

            var userID = result.valueForKey("id") as! NSString
            var facebookProfileUrl = "http://graph.facebook.com/\(userID)/picture?type=large"



            println("fetched user: \(result)")


}

al imprimir la traída de usuario sólo obtengo el id y el nombre ! ,
pero me pidió un permiso para el correo electrónico y amigos y de perfil ,
qué tiene de malo ???

BTW : me mudé a este proyecto desde mi macbook a otro macbook ( debido a que el formato de la mina) que funcionó muy bien cuando estaba en el macbook que he creado el proyecto , pero después de mover el proyecto (mediante bitbucket clon) llegué a este resultado .

consulte en este enlace espero resolver tu problema stackoverflow.com/a/30634444/4536708 @user3703910
Problema resuelto en duplicar post: stackoverflow.com/a/31503463/3382676

OriginalEl autor user3703910 | 2015-07-13

4 Comentarios

  1. 41

    Como por el nuevo Facebook SDK, que debe tener para pasar los parámetros con los FBSDKGraphRequest

    if((FBSDKAccessToken.currentAccessToken()) != nil){
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
            if (error == nil){
                println(result)
            }
        })
    }

    Documentaciones Enlace : https://developers.facebook.com/docs/facebook-login/permissions/v2.4

    Objeto de usuario referencia : https://developers.facebook.com/docs/graph-api/reference/user

    Con perfil público puede obtener de género :

    public_profile (Default)
    
    Provides access to a subset of items that are part of a person's public profile. A person's public profile refers to the following properties on the user object by default:
    
    id
    name
    first_name
    last_name
    age_range
    link
    gender
    locale
    timezone
    updated_time
    verified
    podría usted me dirija a su documentación ? y ¿cómo puedo obtener el sexo ?
    actualizada la respuesta (Y)
    cómo obtener el valor del resultado? necesito conseguir el id de correo electrónico ,nombre y apellido, etc. cómo hacerlo? he probado con el resultado.valueForKey(«email»). no me ayudó.

    OriginalEl autor Ashish Kakkad

  2. 7

    Swift 4

    Un ejemplo en Swift 4 que también muestra la forma correcta de analizar los campos individuales del resultado:

    func fetchFacebookFields() {
        //do login with permissions for email and public profile
        FBSDKLoginManager().logIn(withReadPermissions: ["email","public_profile"], from: nil) {
            (result, error) -> Void in
            //if we have an error display it and abort
            if let error = error {
                log.error(error.localizedDescription)
                return
            }
            //make sure we have a result, otherwise abort
            guard let result = result else { return }
            //if cancelled nothing todo
            if result.isCancelled { return }
            else {
                //login successfull, now request the fields we like to have in this case first name and last name
                FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "first_name, last_name"]).start() {
                    (connection, result, error) in
                    //if we have an error display it and abort
                    if let error = error {
                        log.error(error.localizedDescription)
                        return
                    }
                    //parse the fields out of the result
                    if
                        let fields = result as? [String:Any],
                        let firstName = fields["first_name"] as? String,
                        let lastName = fields["last_name"] as? String
                    {
                        log.debug("firstName -> \(firstName)")
                        log.debug("lastName -> \(lastName)")
                    }
                }
            }
        }
    }
    buen ejemplo para Swift 4, error tipográfico en la 2ª a la última línea, aunque firsName -> nombre
    Thx por los comentarios de @shokaveli corregido 🙂
    Muchas gracias ..código funciona bien en iOS 11.4

    OriginalEl autor HixField

  3. 4

    Supongo que este código debería ayudarle a obtener la información necesaria

    Swift 2.x

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
        graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
    
            if ((error) != nil)
            {
                //Process error
                print("Error: \(error)")
            }
            else
            {
                print("fetched user: \(result)")
                let userName : NSString = result.valueForKey("name") as! NSString
                print("User Name is: \(userName)")
                let userID : NSString = result.valueForKey("id") as! NSString
                print("User Email is: \(userID)")
    
    
    
            }
        })
    Obtener Valor de tipo’?’ no tiene ningún miembro ‘valueForKey’ mensaje de error
    La respuesta de arriba es para Swift 2.x , ahora en swift 3.x probar con algo como esto. (Voy a actualizar a la respuesta anterior, para swift 3) vamos a los datos:[String:AnyObject] = resultado! [String : AnyObject] print(datos[«first_name»]!) print(datos[«id»]!)

    OriginalEl autor Rizwan Ahmed

  4. 0

    En Swift y Xcode 4.2 10.1

    @IBAction func onClickFBSign(_ sender: UIButton) {
    if let accessToken = AccessToken.current {
    //User is logged in, use 'accessToken' here.
            print(accessToken.userId!)
    print(accessToken.appId)
    print(accessToken.authenticationToken)
    print(accessToken.grantedPermissions!)
    print(accessToken.expirationDate)
    print(accessToken.declinedPermissions!)
    let request = GraphRequest(graphPath: "me", parameters: ["fields":"id,email,name,first_name,last_name,picture.type(large)"], 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)
    }
    }
    let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "SVC") as! SecondViewController
    self.present(storyboard, animated: true, completion: nil)
    } else {
    let loginManager=LoginManager()
    loginManager.logIn(readPermissions: [ReadPermission.publicProfile, .email, .userFriends, .userBirthday], viewController : self) { loginResult in
    switch loginResult {
    case .failed(let error):
    print(error)
    case .cancelled:
    print("User cancelled login")
    case .success(let grantedPermissions, let declinedPermissions, let accessToken):
    print("Logged in : \(grantedPermissions), \n \(declinedPermissions), \n \(accessToken.appId), \n \(accessToken.authenticationToken), \n \(accessToken.expirationDate), \n \(accessToken.userId!), \n \(accessToken.refreshDate), \n \(accessToken.grantedPermissions!)")
    let request = GraphRequest(graphPath: "me", parameters: ["fields": "id, email, name, first_name, last_name, picture.type(large)"], 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)
    }
    }
    let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "SVC") as! SecondViewController
    self.navigationController?.pushViewController(storyboard, animated: true)
    }
    }
    }
    }

    https://developers.facebook.com/docs/graph-api/reference/user

    OriginalEl autor iOS

Dejar respuesta

Please enter your comment!
Please enter your name here