facebook - 无法使用 swift 3 和 ios 10 从 facebook 检索电子邮件

标签 facebook swift3 ios10

您好,我正在尝试使用 swift 玩 facebook ios sdk 时从 facebook 检索我的电子邮件。 IOS 平台是 10,swift 3 和 Xcode 8。我按照在线教程进行操作,但无法检索电子邮件。

下面是我的代码:

if FBSDKAccessToken.current() == nil {
            print("I got token")
            let fbButton = FBSDKLoginButton()
            fbButton.readPermissions = ["public_profile", "email", "user_friends"]
            view.addSubview(fbButton)
            fbButton.center = view.center
            fbButton.delegate = self
            self.fetchprofile()
        }

        else {
            print("Dont have token")
            let loginView : FBSDKLoginButton = FBSDKLoginButton()
            self.view.addSubview(loginView)
            loginView.center = self.view.center
            loginView.readPermissions = ["public_profile", "email", "user_friends"]
            loginView.delegate = self
        }

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
        if error != nil {
            print(error.localizedDescription)
            return
        }
        print("I'm in")
        fetchprofile()
    }

func fetchprofile() {

        print("Getting profile")

        let parameters = ["fields": "email"]

        let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: parameters, httpMethod: "GET")

        graphRequest.start(completionHandler: {(connection, result, error) -> Void in

            if error != nil {
                print("Error retrieving details: \(error?.localizedDescription)")
                return
            }

            guard let result = result as? [String:[AnyObject]], let email = result["email"] else {
                return
            }
            print("Email: \(email)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
            self.view.backgroundColor = UIColor.red

        })
    }

在我的 appdelegate.swift 文件中:

 //have both google and facebook signin. Google works but facebook doesn't
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return GIDSignIn.sharedInstance().handle(url,
                                                    sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
                                                    annotation: options[UIApplicationOpenURLOptionsKey.annotation]) ||
        FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
    }

我可以登录和注销,但无法检索电子邮件。

更新 实际上,当我实际传递 print(email) 时,我可以在控制台上看到它作为可选语句。如果没有可选声明,我无法显示它

最佳答案

我是这样解决问题的:

func fetchProfile(){
     FBSDKGraphRequest(graphPath: "/me", parameters: ["fields" : "email, name, id, gender"])
        .start(completionHandler:  { (connection, result, error) in
            guard let result = result as? NSDictionary, let email = result["email"] as? String,
                let user_name = result["name"] as? String,
                let user_gender = result["gender"] as? String,
                let user_id_fb = result["id"]  as? String else {
                    return
            }         
        })

    }

关于facebook - 无法使用 swift 3 和 ios 10 从 facebook 检索电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39553521/

相关文章:

ios - 更改 UILabel 中某个单词的颜色

ios - swift 3 : Add UIButton extension to ViewController

ios - 自定义标题 View 在 iOS 10 中不居中

ios - 从 Facebook 请求用户信息和好友信息

facebook - 桌面网页游戏策略更改允许哪些参数?

swift3 - Swift 3 绘图应用程序中的错误

iOS 10 UIImagePickerController 黑屏

ios - CNContactViewController 隐藏导航栏

android - 通过 Facebook 应用程序打开 Facebook 页面

javascript - 将迷你状态更新发布到用户墙上