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

iOS应用Firebase登录后调用Google Sheets API认证失败求助

解决Firebase登录后调用Google Sheets API的认证错误

核心问题

Firebase Auth的登录凭据无法直接用于Google Sheets API,你需要从Firebase关联的Google登录账号中获取专属的OAuth2访问令牌,才能完成Sheets API的身份验证。

解决步骤

1. 登录时添加Sheets API权限范围

在Google登录流程中,必须明确请求Sheets API的操作权限(根据需求选择读写或只读)。修改你的AuthenticationViewModel.swift登录逻辑:

let googleProvider = GoogleAuthProvider()
// 按需选择权限,读写用spreadsheets,只读用spreadsheets.readonly
googleProvider.addScope("https://www.googleapis.com/auth/spreadsheets")

Auth.auth().signIn(with: googleProvider) { result, error in
    // 处理登录结果
}

2. 从Firebase用户提取OAuth2访问令牌

登录成功后,通过Firebase用户的providerData获取Google登录凭据,从中提取访问令牌。在AuthenticationViewModel.swift中添加方法:

func getGoogleOAuthAccessToken() -> String? {
    guard let currentUser = Auth.auth().currentUser else { return nil }
    for provider in currentUser.providerData {
        if provider.providerID == "google.com" {
            return provider.accessToken
        }
    }
    return nil
}

3. 在Sheets API请求中携带令牌

修改SpreadsheetsController.swift的请求逻辑,在请求头中加入认证令牌:

// 先获取令牌
guard let accessToken = AuthenticationViewModel().getGoogleOAuthAccessToken() else {
    print("无法获取OAuth访问令牌")
    return
}

// 构造Sheets API追加请求
let sheetUrl = URL(string: "https://sheets.googleapis.com/v4/spreadsheets/{你的表格ID}/values/{目标范围}:append?valueInputOption=USER_ENTERED")!
var request = URLRequest(url: sheetUrl)
request.httpMethod = "POST"
// 添加认证头
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// 构造要追加的数据
let payload = ["values": [["测试内容1", "测试内容2"]]]
do {
    request.httpBody = try JSONSerialization.data(withJSONObject: payload)
} catch {
    print("序列化数据失败: \(error)")
    return
}

// 发送请求
URLSession.shared.dataTask(with: request) { data, response, error in
    // 处理响应逻辑
}.resume()

4. 检查Google Cloud配置

  • 确保Firebase对应的Google Cloud项目中,已启用Google Sheets API
  • 在OAuth同意屏幕中,已添加你请求的Sheets权限范围;如果是正式环境,需发布同意屏幕并添加验证用户

额外注意

访问令牌存在过期时间,过期后可通过providerData.refreshToken调用Google令牌刷新接口获取新令牌。如果你的Firebase登录使用的是非Google Provider(如邮箱密码),则无法用此方法,需改用服务账号认证(仅推荐后端使用,iOS端不建议直接集成)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:25:28