You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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("登录流程完成")
}

关键修复点说明:

  1. 增加取消判断:通过result.isCancelled直接捕获用户取消操作的场景,提前返回避免后续无效代码执行
  2. 安全获取AccessToken:用guard let确保accessToken不为nil后再访问tokenString,从根源避免空指针
  3. 安全获取UID:同样用guard let处理currentUser为nil的极端情况,让代码更健壮

这样修改后,不管用户是取消登录、出现错误还是正常登录,代码都能安全处理,不会再崩溃啦!

内容的提问来源于stack exchange,提问作者John Smith Optional

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:18:52