Мне трудно интегрировать API YouTube v3. Я пробовал все возможные решения, указанные в Ключ API Ютуб.
Вот мой код:
YouTube.Search.List query;
query = youTube.search().list("id, snippet");
query.setKey(YOUR_API_KEY);
query.setMaxResults(5L);
query.setChannelId(channelId);
query.setOrder("date");
SearchListResponse response = query.execute();
List<SearchResult> results = response.getItems();
Согласно ответу Айман Аль-Абси, я также попытался передать packageName и сгенерировать SHA1 (ZFzdtB22bpkKGc1kSgi0qxUPSWk=).
request.getHeaders().set("X-Android-Package", packageName);
request.getHeaders().set("X-Android-Cert",signature);
Но когда я это сделал, я получил ошибку:
{ "code": 403, "errors": [ { "domain": "usageLimits", "message": "The Android package name and signing-certificate fingerprint, com.example.somename and ZFzdtB22bpkKGc1kSgi0qxUPSWk=, do not match the app restrictions configured on your API key. Please use the API Console to update your key restrictions.", "reason": "ipRefererBlocked", "extendedHelp": "https://console.developers.google.com/apis/credentials?project=1234567" } ], "message": "The Android package name and signing-certificate fingerprint, com.example.somename and ZFzdtB22bpkKGc1kSgi0qxUPSWk=, do not match the app restrictions configured on your API key. Please use the API Console to update your key restrictions." }
Конфигурации ключей API:
Я добавил отпечатки пальцев SHA-1 как для среды отладки, так и для рабочей среды.
Соответствует ли атрибут упаковка узла манифеста вашего AndroidManifest имени пакета отпечатка пальца SHA, который вы используете?
@ Саймон Да. Атрибуты пакета правильные.
Хорошо, это старо, но я понял это для своего случая и подумал, что это может помочь другим. Я пошел в oauth, и это, казалось, разрешилось.
реальная проблема заключается в том, что если вы используете неограниченный ключ [и, возможно, в зависимости от включенного API], у вас есть связанная учетная запись для выставления счетов; айпи должно работать. Если он работает без ограничений, вы на правильном пути.
Как только вы ограничите его Android, он снова не сработает с этим ключом, пока вы не подпишете свое приложение. Самым простым способом, который я нашел, было использование конфигурации подписи для вариантов под Android в файле gradle.
signingConfigs {
debug {
storeFile file("/users/xxxxxxxxxx/Android/keystores/google_demos/debugandroid.jks")
storePassword "xxxxxxxxxx"
keyAlias "com.example.xxxxxxxxxx"
keyPassword "xxxxxxxx"
}
}
Я знаю, что мы также можем добиться этого с помощью клиента oauth2, но в моем случае мне нужно использовать API-ключ, и согласно документации Google это должно быть возможно.
Я помню, как ходил по кругу, пытаясь заставить это работать только для поиска, и мне было трудно. Затем в моем приложении мне все равно нужно было публиковать видео в учетной записи пользователя; вместо этого реализовал oauth, и это сработало. В SO есть несколько старых сообщений, которые предлагают вместо этого использовать веб-ключ, и я думаю, что в какой-то момент у меня это сработало. Но я, честно говоря, не знаю, работает ли это больше. Я узнал с помощью примера приложения, в котором использовался ключ, и сейчас он у меня не работает.
да. Я также пытался использовать веб-ключ. Это тоже не работает. Спасибо.
@stackoverflow Это так удивительно!!! Никто не может решить мою проблему.