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

使用Facebook登录iOS应用时出现Bad access token错误求助

iOS Facebook登录对接Firebase报"Bad access token"问题排查方案

问题定位

核心矛盾是Facebook登录返回的AccessToken无法被Firebase Auth验证,同时跳转Facebook时出现Limited Login提示——这是因为当前AccessToken模式与Firebase不兼容,再加上部分配置缺失导致的。


具体解决步骤

1. 关闭Facebook Limited Login模式

跳转时的提示说明你启用了Limited Login,但Firebase Auth暂不支持该模式的AccessToken,需立即关闭:

  • 进入Facebook开发者后台,找到你的应用→【Login with Facebook】→【Settings】
  • 将【Limited Login】选项设置为Disabled

2. 确保请求正确的权限

初始化FBLoginButton时,指定Firebase所需的基础权限:

let loginButton = FBLoginButton()
// 必须包含public_profile,email为可选权限
loginButton.permissions = ["public_profile", "email"]

3. 核对Firebase与Facebook的配置一致性

  • 确认Firebase控制台【Authentication】→【Sign-in method】→【Facebook】中的App ID和App Secret,与Facebook开发者后台【Settings】→【Basic】中的信息完全一致(注意不要有空格、大小写错误)
  • 在Facebook后台【Login with Facebook】→【Settings】的Valid OAuth Redirect URIs中,添加Firebase提供的回调地址(可在Firebase Facebook配置页查看)

4. 补充Info.plist必要配置

当前配置缺少关键项,需添加以下内容:

<!-- 允许应用调用Facebook相关Scheme -->
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fbauth2</string>
</array>

<!-- 解决iOS 9+网络请求限制 -->
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

5. 代码优化:先验证AccessToken再传给Firebase

在将token传给Firebase前,先通过Facebook Graph API验证token有效性,排除无效token的问题:

func loginButton(_ loginButton: FBSDKLoginKit.FBLoginButton, didCompleteWith result: FBSDKLoginKit.LoginManagerLoginResult?, error: (any Error)?) {
    if let error = error {
        print("Facebook登录错误:\(error.localizedDescription)")
        return
    }
    
    guard let token = result?.token else {
        print("未获取到有效Facebook Token")
        return
    }
    
    // 先验证Token有效性
    let graphRequest = FBSDKLoginKit.GraphRequest(graphPath: "/me", 
                                                  parameters: ["fields": "id,name"], 
                                                  tokenString: token.tokenString, 
                                                  version: nil, 
                                                  httpMethod: .get)
    
    graphRequest.start { _, graphResult, graphError in
        if let graphError = graphError {
            print("Token验证失败:\(graphError.localizedDescription)")
            return
        }
        
        // 验证通过后再请求Firebase登录
        let credential = FacebookAuthProvider.credential(withAccessToken: token.tokenString)
        FirebaseAuth.Auth.auth().signIn(with: credential) { authResult, authError in
            guard authResult != nil, authError == nil else {
                print("Firebase登录失败:\(authError?.localizedDescription ?? "未知错误")")
                return
            }
            
            print("登录成功")
            self.navigationController?.dismiss(animated: true)
        }
    }
}

内容的提问来源于stack exchange,提问作者Xin Lok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:15:04