Ключ API Youtube

когда я пытаюсь использовать API YouTube для поиска, я получаю эту ошибку:

произошла ошибка службы: 403: запрос не указал никаких Android имя пакета или подпись - сертификат отпечатков пальцев. Пожалуйста, убедитесь, что клиент отправляет их или использует консоль API для обновления ключевые ограничения.

в MainActivity у меня есть этот код:

youtube = new YouTube.Builder(new NetHttpTransport(), JSON_FACTORY, new HttpRequestInitializer() {
                    @Override
                    public void initialize(HttpRequest httpRequest) throws IOException {

                    }
                }).setYouTubeRequestInitializer(new YouTubeRequestInitializer(apiKey)).setApplicationName("Some Name").build();

в облачной консоли у меня есть ApiKey для Android, с установленным именем пакета и номер SHA-1, полученный с помощью команды keytool.

3 ответов


после многих проб и ошибок, то, что, наконец, сработало для меня, менялось КЛЮЧ API ограничение нет вместо Android из консоли API Manager и просто сохранить. enter image description here

после выполнения вышеуказанного шага я могу сделать вызов API поиска с моего устройства Android, используя мой ключ API.


наконец-то я нашел решение этой проблемы:)

после создания API_KEY в консоли разработчика Google и ограничения его "именем пакета" и "отпечатком сертификата SHA-1", Вы должны предоставить эти данные в каждом запросе api youtube. Под шагами:

1 - получить имя пакета:

String packageName = context.getPackageName();

2-get SHA-1:

private String getSHA1(String packageName){
    try {
        Signature[] signatures = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;
        for (Signature signature: signatures) {
            MessageDigest md;
            md = MessageDigest.getInstance("SHA-1");
            md.update(signature.toByteArray());
            return BaseEncoding.base16().encode(md.digest());
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

3-Подготовка YouTube api http заголовок:

youTube = new YouTube.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), new HttpRequestInitializer() {
    @Override
    public void initialize(HttpRequest request) throws IOException {
        String packageName = context.getPackageName();
        String SHA1 = getSHA1(packageName);

        request.getHeaders().set("X-Android-Package", packageName);
        request.getHeaders().set("X-Android-Cert",SHA1);
    }
}).setApplicationName(appName).build();

4-Создайте свой запрос api youtube, как вам нравится: Например, для поиска видео:

YouTube.Search.List query;
query = youTube.search().list("id, snippet");
query.setKey(YOUR_API_KEY);
query.setType("video");
query.setFields("items(id/videoId,snippet/title,snippet/description,snippet/thumbnails/default/url)");
query.setQ(search keywords);
SearchListResponse response = query.execute();
List<SearchResult> results = response.getItems();

затем обработать возвращенные Результаты поиска.


попробуйте дважды проверить, правильно ли вы следуете настройке при создании учетных данных OAuth. И убедитесь, что вы включили API данных YouTube в консоли разработчика.

на шаги что нужно делать.
  1. на имя пакета поле, Введитепакет имя

  2. в терминале запустите Keytool утилита в получить хэши SHA1 отпечаток пальца для вашей цифровой подписи .общественные APK файл по сертификат.

программы keytool -exportcert -псевдоним androiddebugkey -хранилище путь к отладка-или-изготовление-ключей -списке -в

  1. вставьте отпечаток SHA1 в форму по запросу.

Я также нашел здесь в этом поэтому вопрос ответил Гуглер, что пользователь должен пройти через OAuth2. Потому что учетные записи служб не поддерживается в Data API v3.