Google API - 凭据无效

时间:2018-05-28 13:12:30

标签: swift oauth google-api youtube-api google-signin

我正在尝试创建一个iOS应用,用户可以使用YouTube API为YouTube视频评分。为此,必须对用户进行身份验证。因此,我使用Google的Google Sign-In来验证我的用户身份。我跟着implementation guide,似乎用户已登录。我可以访问用户的数据,例如他们的个人资料图片,姓名等。

由于我使用的是YouTube API,因此我需要在用户登录之前将YouTube范围添加到Google登录。所以,我这样做就是这样......

GIDSignIn.sharedInstance().scopes = ["https://www.googleapis.com/auth/youtube"]

现在,只要用户登录,它就会请求访问其YouTube频道。

Screenshot of Google Sign-In page

好像一切都运转良好。但是,现在评价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

我一直在互联网上寻找答案,但无济于事。所以我决定问。有没有人知道如何解决这个问题?任何意见都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

尝试将访问令牌添加到Alamofire请求的标头中,而不是将其作为参数传递。就这样:

let headers: HTTPHeaders = ["Authorization": "Bearer \(token)"]
let request = Alamofire.request(path, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: headers)