iOS集成Google Sign-In调用YouTube API时出现无效凭据及401错误
解决YouTube API点赞视频时的401未授权错误
看起来你已经走通了Google Sign-In的流程,能正常获取用户频道信息,但在调用点赞API时栽了跟头——这个401错误其实是因为请求没有正确携带用户的授权凭证,咱们一步步来解决:
1. 先搞清楚问题出在哪
你之前尝试把access_token替换掉API_KEY放在parameters里,这是错误的用法!YouTube API的用户授权需要通过请求头的Bearer令牌来传递,而不是作为URL参数的key。API_KEY是给不需要用户授权的公共接口用的,点赞这种需要操作用户账号的接口必须用用户的access_token做身份验证。
2. 正确获取并传递access_token
首先确保你能拿到有效的access_token:
// 从已登录的Google用户获取access_token guard let currentUser = GIDSignIn.sharedInstance().currentUser, let auth = currentUser.authentication, let accessToken = auth.accessToken else { print("用户未登录或获取access_token失败") return }
然后修改你的点赞请求,把access_token放到请求头的Authorization字段里:
@IBAction func likeButtonTapped(_ sender: Any) { guard let currentUser = GIDSignIn.sharedInstance().currentUser, let auth = currentUser.authentication, let accessToken = auth.accessToken else { print("用户未登录或无有效凭证") return } // 构造请求头:Authorization: Bearer {access_token} let headers: HTTPHeaders = [ "Authorization": "Bearer \(accessToken)", "Content-Type": "application/json" ] let parameters = [ "id": "9T56NNzHE7A", "rating": "like" ] Alamofire.request( "https://www.googleapis.com/youtube/v3/videos/rate", method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers ).responseJSON { response in print("Like Response - \(response)") } }
3. 额外需要注意的点
- 检查access_token的权限:确认你的
youtube.force-ssl权限已经正确申请,并且用户在授权时确实同意了这个权限(可以在Google账号的「第三方应用权限」里查看)。 - 处理token过期:Google的access_token有效期很短(大概1小时),如果遇到401错误,可能是token过期了,需要调用
currentUser.authentication.refreshTokens(completion:)来刷新token。 - 不要混用API_KEY和access_token:API_KEY用于无需用户授权的接口(比如搜索视频),而需要操作用户账号的接口(点赞、订阅)必须用用户的access_token做Bearer授权。
按照这个方式修改后,应该就能正常调用点赞接口了!
内容的提问来源于stack exchange,提问作者Jacob Cavin
相关产品推荐
相关产品推荐

