swift - Google API - 凭据无效

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

我正在尝试制作一个 iOS 应用程序,用户可以在其中使用 YouTube API 对 YouTube 视频进行评分.为此,必须对用户进行身份验证。所以,我使用了谷歌的 Google Sign-In验证我的用户。我关注了implementation guide ,好像用户已登录。我可以访问用户的数据,例如他们的个人资料图片、姓名等。

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

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

现在,每当用户登录时,都会请求访问他们的 YouTube channel 。

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 需要访问 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/

相关文章:

javascript - 如何在google api中获取条形图的左对齐y轴值?

swift - 对数组关联类型的限制

ios - 我可以在 ForEach 中使用协议(protocol)数组吗?

c# - 跨两个 Web API 项目共享 OAuth token

PHP Laravel Passport OAuth2 始终在 protected 路由上返回未经身份验证的信息

android - Gradle 无法解析 com.google.android.gms :play-services-auth:11. 6.0

Swift Firebase 将数据检索到 TableView 中

swift - 如何解码可以是 String 或 NSNumber 的 JSON 值?

java - 如何使用 OAuth 在 coinbase 中进行身份验证

javascript - Oauth.io增量授权