I'm trying to make an authorized call to YouTube Data API v3, as it's described here: https://developers.google.com/youtube/v3/docs/activities/list
I got everything working fine, until I get to the part, where the access token is needed.
I've added GoogleID Sign In, that gives me an access token with the following scopes:
"https://www.googleapis.com/auth/youtube"
"https://www.googleapis.com/auth/youtube.force-ssl"
"https://www.googleapis.com/auth/youtube.readonly"
Those are three scopes, that are mentioned and used at google's reference.
let url = NSURL(string: theURLString)
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let sessionQueue = NSOperationQueue.mainQueue()
let session = NSURLSession(configuration: sessionConfig, delegate: self, delegateQueue: sessionQueue)
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
if Settings.sharedInstance.isLoggedIn {
request.setValue("Bearer \(Settings.sharedInstance.userToken!)", forHTTPHeaderField: "Authorization")
}
let task = session.downloadTaskWithRequest(request)
task.resume()
And after the call I got the following answer:
{
error = {
code = 401;
errors = (
{
domain = global;
location = Authorization;
locationType = header;
message = "Invalid Credentials";
reason = authError;
}
);
message = "Invalid Credentials";
};
}
And I've already tried to make calls with the access_token in the URL string:
theURLString = "https://www.googleapis.com/youtube/v3/activities?part=snippet,contentDetails&home=true&maxResults=10&key=\(googleAPIKey)&access_token=\(Settings.sharedInstance.userToken!)"
And get the following:
{
error = {
code = 401;
errors = (
{
domain = "youtube.parameter";
location = home;
locationType = parameter;
message = "The request uses the <code>home</code> parameter but is not properly authorized.";
reason = authorizationRequired;
}
);
message = "The request uses the <code>home</code> parameter but is not properly authorized.";
};
}
EDIT 1:
Found Google OAuth playground: https://developers.google.com/oauthplayground/
Taking access token from that playground and adding it hard coded to the code doesn't change the response in both cases.