Google API - неверные учетные данные - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь создать приложение для iOS, где пользователь может оценивать видео YouTube с помощью YouTube API .Для этого пользователь должен пройти аутентификацию.Итак, я использовал Google Google Sign-In для аутентификации моих пользователей.Я следовал руководству по внедрению , и кажется, что пользователь вошел в систему. Я могу получить доступ к данным от пользователя, таким как изображение его профиля, имя и т. Д.

Поскольку я использую YouTube API , мне нужно добавить область YouTube в Google Sign-In, прежде чем пользователь войдет в систему. Итак, я делаю это так ...

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

Теперь, когдапользователь регистрируется, он запрашивает доступ к своему каналу YouTube.

Screenshot of Google Sign-In page

Кажется, что все работает отлично.Но теперь, чтобы оценить видео YouTube.Вы можете проверить документацию Google о том, как оценивать видео на YouTube , но в основном это то, что я должен сделать.

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 Sign-In.Который:

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 голосов
/ 28 мая 2018

Попробуйте добавить токен доступа в заголовки вашего запроса Alamofire вместо передачи его в качестве параметра.Как таковой:

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