如何从 facebook sdk 4 快速获取用户电子邮件

Posted

技术标签:

【中文标题】如何从 facebook sdk 4 快速获取用户电子邮件【英文标题】:How to get user email from facebook sdk 4 whith swift 【发布时间】:2015-09-11 01:30:15 【问题描述】:

我一直在尝试使用此代码来获取我的 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 开始,对 /me 的 GET 请求应该包含一个明确的“字段”参数,有人知道我在做什么错吗?谢谢

【问题讨论】:

【参考方案1】:

我认为您需要添加参数。

尝试将其更改为:

let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name, email"])

【讨论】:

【参考方案2】:

我也有同样的问题,我找到了这个目标 c 的解决方案

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

并将参数的值设置为 params 这将起作用

【讨论】:

【参考方案3】:

添加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)
    

【讨论】:

以上是关于如何从 facebook sdk 4 快速获取用户电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 中使用 facebook sdk 4.1 获取用户信息?

如何从 iOS 中的 Facebook SDK 获取用户信息?

如何从原生 iOS Facebook SDK 获取用户兴趣?

如何使用 Facebook iOS SDK 4.0 获取包含用户名和 ID 的用户好友列表

我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别

如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址