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/youtubescope已经列在“已授权的范围”里,并且对于外部用户,已经提交审核(如果是测试阶段,可以添加测试用户)。 - 确认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
相关产品推荐
相关产品推荐

