Swift项目集成Firebase与Facebook认证时取消操作导致崩溃求助
解决Facebook认证取消时的崩溃问题
嘿,这个崩溃问题我之前也碰到过!核心原因是当用户取消Facebook登录流程时,FBSDKAccessToken.current()会返回nil,这时候你直接去访问它的.tokenString属性就会触发空指针崩溃。
咱们来一步步修复:
- 第一步:在处理登录结果前,先判断用户是否取消了登录,或者是否有错误发生
- 第二步:确保获取到有效的AccessToken后,再去生成Firebase认证凭证
修改后的代码如下:
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { // 先处理错误或取消情况 if let error = error { print("登录错误:\(error.localizedDescription)") return } if result.isCancelled { print("用户取消了登录") return } // 确保AccessToken存在再继续 guard let accessToken = FBSDKAccessToken.current() else { print("未获取到有效的Facebook AccessToken") return } let credential = FacebookAuthProvider.credential(withAccessToken: accessToken.tokenString) Auth.auth().signInAndRetrieveData(with: credential) { (user, error) in if let error = error { print("Firebase认证错误:\(error.localizedDescription)") return } guard let uid = Auth.auth().currentUser?.uid else { print("无法获取当前用户UID") return } self.uid = uid self.firstFetch() } print("登录流程完成") }
关键修复点说明:
- 增加取消判断:通过
result.isCancelled直接捕获用户取消操作的场景,提前返回避免后续无效代码执行 - 安全获取AccessToken:用
guard let确保accessToken不为nil后再访问tokenString,从根源避免空指针 - 安全获取UID:同样用
guard let处理currentUser为nil的极端情况,让代码更健壮
这样修改后,不管用户是取消登录、出现错误还是正常登录,代码都能安全处理,不会再崩溃啦!
内容的提问来源于stack exchange,提问作者John Smith Optional
相关产品推荐
相关产品推荐

