0

我不明白为什么我无法检索用户的电子邮件。

我收到错误

线程 1:致命错误:在展开可选值时意外发现 nil

我设法检索了除邮件之外的所有数据......查看我的代码:

if let dict = result as? Dictionary<String, AnyObject>{
    let userName: String = dict["name"] as AnyObject? as! String
    let facebookID: String = dict["id"] as AnyObject? as! String             
    let email: String = dict["email"] as AnyObject? as! String

    let user = PFUser.current()!
    let pictureURL = "https://graph.facebook.com/\(facebookID)/picture?type=large&return_ssl_resources=1"

    let group = DispatchGroup()
    group.enter()
    DispatchQueue.main.async {
        let imageData = NSData.init(contentsOf: NSURL(string: pictureURL)! as URL)
        if let picture = PFFile(name:"pic.png", data: imageData! as Data) {
            user["profilePicture"] = picture
            user.saveInBackground()
        }
        group.leave()
    }

    user["username"] = userName
    //user["email"] = email

    user.saveInBackground()

    self.performSegue(withIdentifier: "segueToFeedControllerF", sender: nil)
}
4

2 回答 2

0

btn_Facebook.addTarget(self, action: #selector(handleCustomFBLogin), for: .touchUpInside)

@objc func handleCustomFBLogin(sender:UIButton!){
    FBSDKLoginManager().logIn(withReadPermissions: ["email", "public_profile"], from: self) { (result, err) in
        if(err != nil){
            print("Custom FB Login Failed")
            return
        }
        //print(result?.token.tokenString)
        self.showEmailAddress()
    }
}

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!){
    if(error != nil){
        print(error)
        return
    }
    print("Successfully Logged in using facebook")
    showEmailAddress()
}

func showEmailAddress(){
    let accesstoken = FBSDKAccessToken.current();
    guard let accessTokenString = accesstoken?.tokenString else {return}

    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields" : "id, name, first_name, last_name, email, birthday, picture"]).start { (connection, result, err) in
        if(err != nil){
            print("Failed to start GraphRequest", err ?? "")
            return
        }
        print(result ?? "")
        if(result != nil){
            self.sendDetailsForFacebookLogin(result: result as! NSDictionary)
        }else{
            MyCustomAlert.sharedInstance.ShowAlert(vc: self, myTitle: StringClass.sharedInstance.lcStr_loginfailedcaps, myMessage: StringClass.sharedInstance.lcStr_plsTryAgain)
        }

    }

}

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!){
    print("Logged out of Facebook")
}

func sendDetailsForFacebookLogin(result:NSDictionary){
    print(result)
}
于 2018-06-11T09:27:14.270 回答
0

如错误所述,用户很可能拒绝访问电子邮件的权限。您可以在解析结果之前检查授予的权限。

LoginManager().logIn(readPermissions: [.publicProfile, .email], viewController: viewController) { (loginResult) in
            switch loginResult {
            case .failed(let error):
                print(error)
            case .cancelled:
                print("User cancelled login.")
            case .success(let grantedPermissions, let declinedPermissions, let accessToken):
                if declinedPermissions.count == 0 {
                    if(grantedPermissions.contains("email"))
                    {
                        //parse the result
                    }
                }
            }
        }
于 2018-06-10T13:35:35.397 回答