【问题标题】:Didn't get the FBSDKtoken没有得到 FBSDKtoken
【发布时间】:2017-10-02 10:06:02
【问题描述】:
 - @IBAction func BtnFaceBookLogin(_ sender: Any)
       {
           let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
           fbLoginManager.logOut()
           fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) -> Void in
               if (error == nil){
                   let fbloginresult : FBSDKLoginManagerLoginResult = result!
                   if(fbloginresult.grantedPermissions.contains("email"))
                   {
                       self.getFBUserData()
                   }
               }
           }
       }

   func getFBUserData()
       {
           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)
                   {
                       print(result!)

                       let socialID1:[String:AnyObject] = result as! [String : AnyObject]

                       let socialID = socialID1["id"] as! String

                       print(socialID)
                   }
                   else
                   {
                       print("Not Dismiss");
                   }
               })
           }
       }

我尝试了这段代码,但没有得到任何响应,出现错误:

在展开可选值时意外发现 nil

我没有获得 FBSDK 令牌。

【问题讨论】:

  • 您在哪一行收到错误?
  • if(fbloginresult.grantedPermissions.contains("email"))

标签: ios swift swift3


【解决方案1】:
let loginManager = FBSDKLoginManager()
        loginManager.logIn(withReadPermissions: ["user_about_me", "email" , "user_birthday","user_hometown"], from: self) { (loginResult, error) in
            if error != nil
            {

            }
            else
            {
                if loginResult?.grantedPermissions == nil
                {

                    return
                }


                if (loginResult?.grantedPermissions.contains("email"))!
                {
                    if (loginResult?.grantedPermissions.contains("user_birthday"))!
                    {
                        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")!)")


                }


            }else{

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

    }

在 Swift-3 TryThis 中

【讨论】:

  • 当我点击完成时它直接返回 if loginResult?.grantedPermissions == nil { return }
【解决方案2】:

试试下面的代码

let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()

 @IBAction func btnFbSignInAction(_ sender: Any) {

        fbLoginManager.logOut()
        fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) in
            if error != nil {
                // Handle Error
                NSLog("Process error")
            } else if (result?.isCancelled)! {
                // If process is cancel
                NSLog("Cancelled")
            }
            else {
                // Parameters for Graph Request
                let parameters = ["fields": "email, name"]

                FBSDKGraphRequest(graphPath: "me", parameters: parameters).start {(connection, result, error) -> Void in
                    if error != nil {
                        NSLog(error.debugDescription)
                        return
                    }

                    // Result
                    print("Result: \(result)")

                    // Handle vars
                    if let result = result as? [String:String],
                        let email: String = result["email"],
                        let fbId: String = result["id"] {
                        print("Email: \(email)")
                        print("fbID: \(fbId)")
                    }
                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2017-12-16
    • 2017-07-07
    • 2020-12-21
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多