代码之家  ›  专栏  ›  技术社区  ›  Jacob Cavin Au Ris

Google API-无效凭据

  •  0
  • Jacob Cavin Au Ris  · 技术社区  · 7 年前

    我正在尝试制作一个iOS应用程序,用户可以使用 YouTube API 。为此,必须对用户进行身份验证。所以,我用了谷歌的 Google Sign-In 验证我的用户。我跟着 implementation guide ,似乎用户已登录。我可以访问用户的数据,如他们的配置文件图像、名称等。

    因为我用的是 YouTube应用程序接口 ,我需要在用户登录之前将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谷歌登录给我的访问令牌。即:

    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.lmaibhsk3以上nr34rb0fgthwizj-dnb7k935ehyvk1x8nkgmbma---U 3hxhys7uk-hem3ggg-higjv83rhxhgnkvkwn0sen7xtwhtbevjg8hsbk3h8h1gx8khehejgvg

    我在网上到处找,试图找到答案,但没有用。所以我决定问。有人知道如何解决这个问题吗?任何意见都将受到高度赞赏!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Au Ris    7 年前

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

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