Ключ 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_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 в консоли разработчика.
на шаги что нужно делать.
на имя пакета поле, Введитепакет имя
в терминале запустите Keytool утилита в получить хэши SHA1 отпечаток пальца для вашей цифровой подписи .общественные APK файл по сертификат.
программы keytool -exportcert -псевдоним androiddebugkey -хранилище путь к отладка-или-изготовление-ключей -списке -в
- вставьте отпечаток SHA1 в форму по запросу.
Я также нашел здесь в этом поэтому вопрос ответил Гуглер, что пользователь должен пройти через OAuth2. Потому что учетные записи служб не поддерживается в Data API v3.