Swift:解析服务器登录facebook无法检索邮件

标签 swift option-type parse-server forced-unwrapping

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

我收到错误

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

我设法检索除邮件之外的所有数据......请参阅我的代码:

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)
}

最佳答案

btn_Facebook.addTarget(self, 操作: #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)
}

关于Swift:解析服务器登录facebook无法检索邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50783691/

相关文章:

Swift:在 NSPredicate 中使用扩展

ios - Swift - 应用程序在设置 UserDefaults 后崩溃

java - 可以在可选的任何东西中

ios - 托管解析是否支持推送通知?

ios - 如何为标签栏项目设置动画

swift - 从最后一项获取核心数据 ManageObject 排序

Swift 选项困惑

Swift:无法在循环内解包可选

ios - 将一个数组类型的解析对象设置为 tableView

flutter - 尝试在dart(解析服务器SDK)中使用此包(flutter/dart)