Как получить адрес электронной почты пользователя из facebook sdk 4 с помощью Swift

Я пробовал этот код, чтобы получить информацию о пользователе, необходимую для моего приложения iOS, когда я нажимаю кнопку func loginButton, я должен войти в систему и получить имя пользователя и адрес электронной почты,

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {

    if( error != nil)
    {
        println(error.localizedDescription)
        return
    }

    if let userToken = result.token{
        //Get user acces token 
        let token:FBSDKAccessToken=result.token

        println("Token = \(FBSDKAccessToken.currentAccessToken().tokenString)")

        println("User ID = \(FBSDKAccessToken.currentAccessToken().userID)")


        let protectedPage = self.storyboard?.instantiateViewControllerWithIdentifier("ProtectedPageViewController") as! ProtectedPageViewController
        let protectedPageNav = UINavigationController(rootViewController: protectedPage)

        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

        appDelegate.window?.rootViewController = protectedPageNav

    }

    //Show user information
    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("fetched user: \(result)")
            let userEmail : NSString = result.valueForKey("email") as! NSString
            println("User Email is: \(userEmail)")
            let userName : NSString = result.valueForKey("name") as! NSString
            println("User Name is: \(userName)")

        }
    })
}

Есть комментарий, показывающий информацию о пользователе, который должен печатать адрес электронной почты и имя пользователя, он печатает имя, но не адрес электронной почты, и я получаю следующую ошибку: FBSDKLog: начиная с Graph API v2.4, запросы GET для / me должны содержать явный параметр "поля", может кто знает, что я делаю не так? Спасибо


person altexo1    schedule 11.09.2015    source источник


Ответы (3)


Я думаю, вам нужно будет добавить параметры.

Попробуйте изменить его на:

let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name, email"])
person Francis Yeap    schedule 11.09.2015

У меня тоже такая же проблема, и я нашел это решение для цели c

 NSMutableDictionary*params = [NSMutableDictionary dictionary];
[params setValue:@"fields" forKeyPath:@"fields"];
[params setValue:@"name" forKeyPath:@"name"];
[params setValue:@"email" forKeyPath:@"email"];

и установите значение параметров в params, это сработает

person shafi    schedule 18.09.2015

Добавьте LoginButtonDelegate Делегат и добавьте протокол, после чего добавьте ниже код и проверьте

 func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?) {
        print(loginButton)
        let loginManager = LoginManager()
        print(result?.token?.tokenString) //YOUR FB TOKEN
        let req = GraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: result?.token?.tokenString, version: nil, httpMethod: HTTPMethod(rawValue: "GET"))
        req.start { (connection, resultData, err) in
            if err == nil {
                print(resultData)
            }else {
                print(err)
            }
        }

           loginManager.logIn(permissions: ["email"], from: self) { (result, error) in
             if error != nil {
              // self.showPopup(isSuccess: false)
               return
             }
             guard let token = AccessToken.current else {
               print("Failed to get access token")
           //    self.showPopup(isSuccess: false)
               return
             }

             FirebaseAuthManager().login(credential: FacebookAuthProvider.credential(withAccessToken: token.tokenString)) {[weak self] (success) in
          //     self?.showPopup(isSuccess: true)
             }
           }
    }

    func loginButtonDidLogOut(_ loginButton: FBLoginButton) {
         print(loginButton)
    }
person NavinBagul    schedule 02.01.2020