我正在尝试制作一个 iOS 应用程序,用户可以在其中使用 YouTube API 对 YouTube 视频进行评分.为此,必须对用户进行身份验证。所以,我使用了谷歌的 Google Sign-In验证我的用户。我关注了implementation guide ,好像用户已登录。我可以访问用户的数据,例如他们的个人资料图片、姓名等。
因为我使用的是 YouTube API ,我需要在用户登录之前将 YouTube 范围添加到 Google 登录。所以,我这样做......
GIDSignIn.sharedInstance().scopes = ["https://www.googleapis.com/auth/youtube"]
现在,每当用户登录时,都会请求访问他们的 YouTube channel 。
似乎一切都在完美运行。但是,现在要对 YouTube 视频进行评分。你可以看看Google's documentation on how to rate a YouTube video ,但基本上,这是我必须做的。
Alamofire.request("https://www.googleapis.com/youtube/v3/videos/rate", method: .post, parameters: ["access_token":token, "id":"9T56NNzHE7A","rating":"like"], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
print("\(response)")
}
现在因为这需要身份验证,所以 API 需要访问 token 。所以(正如您在上面看到的)我为 API 提供了 Google 登录给我的访问 token 。即:
let token = GIDSignIn.sharedInstance().currentUser.authentication.accessToken!
但是,请求不起作用。我得到的回应是
SUCCESS: {
error = {
code = 401;
errors = (
{
domain = global;
location = Authorization;
locationType = header;
message = "Invalid Credentials";
reason = authError;
}
);
message = "Invalid Credentials";
};
}
我不明白如果用户仅在几秒钟前登录,凭据怎么会无效。如果有帮助,下面是我的访问 token 的示例(别担心这实际上不是它):
ve35.LmaIBHsK3dUPNR34rb0fgThwiZj-dNB7k935EhyVK1X8nkgMBmA-_3Hxhys7uk-HEm3ggg-HIgJv83RHXhGNKdVkWn0sEn7XtaWhTbeVjg8hsBK3hK8H1Gx8KzhhaEJGVg
我一直在互联网上寻找答案,但无济于事。所以我决定问问。有谁知道如何解决这个问题?任何输入将不胜感激!
最佳答案
尝试将访问 token 添加到您的 Alamofire
请求的 header 中,而不是将其作为参数传递。因此:
let headers: HTTPHeaders = ["Authorization": "Bearer \(token)"]
let request = Alamofire.request(path, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
关于swift - Google API - 凭据无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50567322/