Swift Facebook登录崩溃



我使用下面的代码登录Facebook。它对绝大多数用户来说都很好,但出于某种原因,它对极少数用户来说会崩溃。

因为没有人提交任何坠机报告,而且我自己似乎无法重现这个问题,这意味着我正在绞尽脑汁想弄清楚原因。

非常感谢您的帮助!

@IBAction func btnFBLoginPressed(sender: AnyObject) {
    let fbLoginManager: FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.logInWithReadPermissions(["public_profile","email", "user_friends"], fromViewController: self, handler: { (result, error) -> Void in
        if error == nil {
            let fbloginresult: FBSDKLoginManagerLoginResult = result
            if result.isCancelled {
                print("cancelled")
                return
            }
            if fbloginresult.grantedPermissions.contains("email") {
                self.getFBUserData()
                //fbLoginManager.logOut()
            }
        }
    })
}
func getFBUserData() {
    if FBSDKAccessToken.currentAccessToken() != nil {
        let params: [String: String] = ["fields": "id, name, first_name, last_name, picture.type(large), email, gender, age_range, locale"]
        FBSDKGraphRequest(graphPath: "me", parameters: params).startWithCompletionHandler({ (connection, result, error) -> Void in
            if error == nil {
                let userName: NSString = result.valueForKey("name") as! NSString
                let facebookID: NSString = result.valueForKey("id") as! NSString
                let firstName: NSString = result.valueForKey("first_name") as! NSString
                let lastName: NSString = result.valueForKey("last_name") as! NSString
                let email: NSString = result.valueForKey("email") as! NSString
                let gender: NSString = result.valueForKey("gender") as! NSString
                let locale: NSString = result.valueForKey("locale") as! NSString
                let defaults = NSUserDefaults.standardUserDefaults()
                defaults.setObject("(userName)", forKey: "userName")
                defaults.setObject("(facebookID)", forKey: "facebookID")
                defaults.setObject("(firstName)", forKey: "firstName")
                defaults.setObject("(lastName)", forKey: "lastName")
                defaults.setObject("(email)", forKey: "email")
                defaults.setObject("(gender)", forKey: "gender")
                defaults.setObject("(locale)", forKey: "locale")
            }
        })
    }
}

您不应该假设result dict包含您正在访问的所有密钥。例如,如果result dict不包含用户的电子邮件,则这行代码将失败:

let email : NSString = result.valueForKey("email") as! NSString

因此,尝试使用as?而不是使用as!运算符:

if let email = result.valueForKey("email") as? NSString {
    // do something
}

相关内容

最新更新