我正在尝试创建一个iOS应用,用户可以使用YouTube API为YouTube视频评分。为此,必须对用户进行身份验证。因此,我使用Google的Google Sign-In来验证我的用户身份。我跟着implementation guide,似乎用户已登录。我可以访问用户的数据,例如他们的个人资料图片,姓名等。
由于我使用的是YouTube API,因此我需要在用户登录之前将YouTube范围添加到Google登录。所以,我这样做就是这样......
GIDSignIn.sharedInstance().scopes = ["https://www.googleapis.com/auth/youtube"]
现在,只要用户登录,它就会请求访问其YouTube频道。
好像一切都运转良好。但是,现在评价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需要访问令牌。所以(正如你在上面看到的那样)我给API提供了Google登录给我的访问令牌。这是:
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";
};
}
如果用户仅在几秒钟之前登录,我就不明白凭据如何无效。如果它有帮助,这里有一个我的访问令牌看起来像的例子(不要担心这不是实际的):
ve35.LmaIBHsK3dUPNR34rb0fgThwiZj-dNB7k935EhyVK1X8nkgMBmA-_3Hxhys7uk-HEm3ggg-HIgJv83RHXhGNKdVkWn0sEn7XtaWhTbeVjg8hsBK3hK8H1Gx8KzhhaEJGVg
我一直在互联网上寻找答案,但无济于事。所以我决定问。有没有人知道如何解决这个问题?任何意见都将受到高度赞赏!
答案 0 :(得分:1)
尝试将访问令牌添加到Alamofire
请求的标头中,而不是将其作为参数传递。就这样:
let headers: HTTPHeaders = ["Authorization": "Bearer \(token)"]
let request = Alamofire.request(path, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: headers)