我通过Google登录iOS sdk获得了我的用户访问令牌。 然后,我使用以下源代码在YouTube中获取播放列表:
func listMyPlaylists(completionHandler: @escaping (_ result: Any?, _ error: Error?) -> ())
{
let url = URL(string: "https://www.googleapis.com/youtube/v3/playlists")!
let parameters: Parameters = ["part": "id","mine": "true"]
let headers: HTTPHeaders = ["Authorization": "Bearer " + accessToken, "Content-Type": "application/json"]
Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON { json in
if let error = json.result.error
{
completionHandler(nil, error)
}
else
{
completionHandler(json.result.value, nil)
}
}
}
但是,我收到以下错误。我错过了什么?
{
error = {
code = 403;
errors = (
{
domain = global;
message = "Insufficient Permission";
reason = insufficientPermissions;
}
);
message = "Insufficient Permission";
};
}
答案 0 :(得分:1)
如果您未按Youtube API Common request errors
中所述的方式包含授权范围,通常会发生这种情况。forbidden(403) - insufficientPermissions提供的OAuth 2.0令牌 对于请求,指定不足以访问的范围 请求的数据。
您可以使用的Youtube scopes之一是
https://www.googleapis.com/auth/youtube.force-ssl
答案 1 :(得分:0)
我同意@noogui的回答,在这里我想解释一下如何实现这个目标 - 检查您设置的范围,如果 kGTLRAuthScopeYouTubeReadonly ,则将其更改为 kGTLRAuthScopeYouTubeUpload
private let scopes = [kGTLRAuthScopeYouTubeUpload]
并将其设置为 viewDidLoad
GIDSignIn.sharedInstance().scopes = scopes
以下是您可以检查的范围列表
kGTLRAuthScopeYouTube kGTLRAuthScopeYouTubeForceSsl kGTLRAuthScopeYouTubeUpload kGTLRAuthScopeYouTubeReadonly kGTLRAuthScopeYouTubeYoutubepartner kGTLRAuthScopeYouTubeYoutubepartnerChannelAudit