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

iOS应用调用YouTube API评分时遭Google API无效凭证错误求助

解决YouTube API调用401 Invalid Credentials的问题

我之前做类似的YouTube API集成时也碰到过这个坑,咱们一步步来排查和解决:

1. 最常见的错误:Access Token的传递方式不对

你现在是把access_token作为URL参数传递,但YouTube API要求把令牌放在Authorization请求头里,格式是Bearer <your-access-token>,而不是拼在URL参数里。这是导致401的最可能原因。

修改你的Alamofire请求代码,把token移到headers中,同时移除参数里的access_token:

let token = GIDSignIn.sharedInstance().currentUser.authentication.accessToken!
let headers: HTTPHeaders = [
    "Authorization": "Bearer \(token)",
    "Content-Type": "application/x-www-form-urlencoded"
]

let parameters = [
    "id": "9T56NNzHE7A",
    "rating": "like"
]

Alamofire.request("https://www.googleapis.com/youtube/v3/videos/rate",
                  method: .post,
                  parameters: parameters,
                  encoding: URLEncoding.httpBody, // 确保参数放在请求体里
                  headers: headers)
    .responseJSON { response in
        print("\(response)")
    }

2. 验证Token的权限和有效性

即使刚登录,也可以确认下token是否包含了YouTube的权限:

  • 复制你的access token,调用Google的TokenInfo接口(可以用Postman或者curl):
    curl https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=YOUR_TOKEN
    
  • 检查返回结果里的scope字段,是否包含https://www.googleapis.com/auth/youtube。如果没有,说明授权流程中scope没有正确生效。

3. 检查Google Cloud Console的配置

  • 确认你已经启用了YouTube Data API v3:进入Google Cloud Console → API和服务 → 库,搜索YouTube Data API v3并启用。
  • 检查OAuth同意屏幕的配置:确保你添加的https://www.googleapis.com/auth/youtube scope已经列在“已授权的范围”里,并且对于外部用户,已经提交审核(如果是测试阶段,可以添加测试用户)。
  • 确认OAuth客户端ID的Bundle ID和你iOS项目的Bundle ID完全匹配,没有拼写错误。

4. 尝试刷新Token

有时候即使刚登录,token也可能存在异常,尝试刷新一下再调用:

GIDSignIn.sharedInstance().currentUser.authentication.refreshTokensIfNeeded { auth, error in
    guard let refreshedToken = auth?.accessToken, error == nil else {
        print("刷新token失败: \(error?.localizedDescription ?? "未知错误")")
        return
    }
    // 用刷新后的token重新发起API请求
    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(refreshedToken)",
        "Content-Type": "application/x-www-form-urlencoded"
    ]
    // ... 后续请求代码
}

先试试第一种修改请求头的方法,这大概率能解决你的问题,如果不行再依次排查后面的点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:38:07