facebook登录电子邮件不会很快(没有任何解决方案吗?)

Posted

技术标签:

【中文标题】facebook登录电子邮件不会很快(没有任何解决方案吗?)【英文标题】:facebook login email not come swift ( Isn't there any solution ? ) 【发布时间】:2017-11-06 23:31:29 【问题描述】:

你好,我需要一些帮助我一直在搜索这个主题的几个小时我尝试了很多东西但我做不到。

这是我的代码

let facebookReadPermissions = ["public_profile", "email"]

    func getFBUserData() 
    if((FBSDKAccessToken.current()) != nil)
        self.getFBUserDataSecondStep()
     else 
        FBSDKLoginManager().logIn(withReadPermissions: self.facebookReadPermissions, from: self)  (result, error) in
            if error != nil 
                FBSDKLoginManager().logOut()
             else if (result?.isCancelled)! 
                FBSDKLoginManager().logOut()
             else 
                self.showLoadingAlert()
                let grantedPermissions = result?.grantedPermissions.map( "\($0)" )
                for permission in self.facebookReadPermissions 
                    if (grantedPermissions?.contains(permission))! 
                        print("permission: \(permission)")
                        // CONSOLE WRITING HERE LIKE THIS
                        // permission: public_profile
                        // permission: email
                    
                
                if (result?.grantedPermissions.contains("email"))! 
                    print("result is: \(result?.description ?? "nil")")
                    // result is: <FBSDKLoginManagerLoginResult: 0x1c0441920> ( console )
                    self.getFBUserDataSecondStep()
                 else 
                    FBSDKLoginManager().logOut()
                
            
        
    


    func getFBUserDataSecondStep()
        FBSDKGraphRequest(graphpath: "/me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler:  (connection, result, error) -> Void in
            if (error == nil)
                if let dict = result as? Dictionary<String, Any> 
                    print(result)
                    // COMING WITH LIKE THIS

                    //"first_name" = Esn;
                    //id = 10156020817443470;
                    //"last_name" = "\U00c7ak\U0131ralar";
                    //name = "Esn Banu\U015f \U00c7ak\U0131ralar";

                    //--// Where is email ?
                    var email = ""
                    var firstName = ""
                    var lastName = ""
                    var facebookId = ""
                    var facebookToken = ""
                    if let controlEmail = dict["email"] 
                        email = controlEmail as! String
                    
                    if let controlFirstName = dict["first_name"] 
                        firstName = controlFirstName as! String
                    
                    if let controlLastName = dict["last_name"] 
                        lastName = controlLastName as! String
                    
                    if let controlFacebookId = FBSDKAccessToken.current().userID 
                        facebookId = controlFacebookId
                    
                    if let controlFacebookToken = FBSDKAccessToken.current().tokenString 
                        facebookToken = controlFacebookToken
                    
                        loginWithFacebook(email: email, firstName: firstName, lastName: lastName, facebookId: facebookId, accessToken: facebookToken, finishedClosured:  (state) in
                            if state 
                                let mainPage = self.mainStoryBoard.instantiateViewController(withIdentifier: "SWRevealViewController")
                                self.removeLoadingAlert()
                                self.passPage(page: mainPage)
                                return
                            
                            self.removeLoadingAlert()
                            self.alert(message: "Giris Basarisiz")
                            return
                        )
                
             else 
                print(error?.localizedDescription)
            
        )

我需要去获取人的电子邮件才能将用户注册到我的应用程序。但是无论我尝试什么,电子邮件都没有。我该如何解决这个问题,如果我尝试使用我的个人帐户没问题,但另一个用户可能会出现问题。

【问题讨论】:

也许用户没有授予电子邮件权限?也许他们没有经过验证的电子邮件? 我尝试了很多用户,我认为这是不可能的 以及我尝试在 android 中编写完成的这个应用程序,并且同一用户在 android 中尝试它的结果是成功的 【参考方案1】:
    Note : This is in swift 4.0

    //giving permission
func getpermission()
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
     //   fbLoginManager.loginBehavior = FBSDKLoginBehavior.web

        fbLoginManager.logIn(withReadPermissions: ["email"], from: self)  (result, error) in
            if (error == nil)
                let fbloginresult : FBSDKLoginManagerLoginResult = result!
                if fbloginresult.grantedPermissions != nil 
                    if(fbloginresult.grantedPermissions.contains("email"))
                    
                        self.getFBUserData()
                        fbLoginManager.logOut()

                    
                
            
        


// Get all details from here
 func getFBUserData()
        var fbId : String = ""
        var fbEmail : String = ""
        var fbName : String = ""
        var fbPickUrl : String = ""

        if((FBSDKAccessToken.current()) != nil)
            FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler:  (connection, result, error) -> Void in
                if (error == nil)
                    //everything works print the user data
                    print("Result111:\(String(describing: result)) "as Any)
                
                let dict = result as! NSDictionary
                print("FB Email1st:\(dict)")

                fbId = dict["id"] as! String
                fbName = dict["name"] as! String
                fbEmail = dict["email"] as! String
 //get user picture url from dictionary
fbPickUrl = (((dict["picture"] as? [String: Any])?["data"] as? [String:Any])?["url"] as? String)!

print("FB ID: \(fbId)\n FB Email:\(fbEmail) \n FbName:\(fbName) \n FBProfileUrl:\(fbPickUrl)\n")


            )
        

    

【讨论】:

【参考方案2】:
let loginManager = FBSDKLoginManager()
        loginManager.logIn(withReadPermissions: ["user_about_me", "email" , "user_birthday","user_hometown"], from: self)  (loginResult, error) in
            if error != nil
            
                self.showalert(strMessage: (error?.localizedDescription)!)
            
            else
            
                if loginResult?.grantedPermissions == nil
                
                    self.showalert(strMessage: "Login Permissions not granted")
                    return
                

                if (loginResult?.grantedPermissions.contains("email"))!
                

                if (loginResult?.grantedPermissions.contains("user_birthday"))!
                
                    self.getFBUserData()
                
                else
                
                    self.getFBUserData()
                    


                
            
        
    
    func getFBUserData()
    



        FBSDKGraphRequest.init(graphPath: "me?fields=id,name,email,first_name,last_name,cover,picture.type(large),gender,birthday,hometown", parameters: nil).start(completionHandler:  (connection , result , error ) in

            if(error == nil)



                DispatchQueue.main.async 
                    let dictionary = result as! NSDictionary

                    print(dictionary)
                    print("Name : \(dictionary.value(forKey: "name")!)")
                    print("FB ID : \(dictionary.value(forKey: "id")!)")
                    self.FaceBookID = dictionary.value(forKey: "id") as? String
 

            else

                self.showalert(strMessage: "Somthig Went Wrong..!")
            
        )

【讨论】:

电子邮件收不到 :( 我设置的facebook id和显示名称 CFBundleURLTypes 它是什么,我应该写什么? 我检查了没问题 cfbundleurltypes 已经设置好了 "first_name" = Esn;性别=女性; ID = 10156022270488470; “姓氏” = “\U00c7ak\U0131ralar”; name = "Esn Banu\U015f\U00c7ak\U0131ralar";图片 = 数据 = "is_silhouette" = 0; url = "scontent.xx.fbcdn.net/v/t1.0-1/p200x200/…"; ; ;就这样来了

以上是关于facebook登录电子邮件不会很快(没有任何解决方案吗?)的主要内容,如果未能解决你的问题,请参考以下文章

如果安装了 Facebook 应用程序,PFFacebookUtils 登录方法不会执行任何操作

Facebook 提交登录审核消息

iOS登录与Facebook不返回电子邮件甚至参数和权限给出

迁移到 Swift 3 时,Facebook 登录不会返回应用程序

Facebook 注销工作正常,但未完全注销

IOS Facebook SDK:尽管授予权限,但登录不返回电子邮件