Clave de la API de Youtube

Cuando intento utilizar la API de YouTube para la búsqueda, obtengo este error:

Hubo un error de servicio: 403: La solicitud no especificó ningún nombre de paquete de Android ni huella digital de certificado de firma. Asegúrese de que el cliente los envíe o utilice la Consola de la API para actualizar las restricciones clave.

En MainActivity tengo este código:

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(); 

En la consola de la nube tengo un ApiKey para Android, con el nombre del paquete establecido y el número SHA-1 obtenido con el comando keytool.

Después de mucho ensayo y error, lo que finalmente funcionó para mí fue cambiar la restricción de clave de API a ninguno en lugar de Android de la consola de API Manager y sólo guardar. introduzca la descripción de la imagen aquí

Después de hacer el paso anterior, puedo hacer una llamada a la API de búsqueda desde mi dispositivo Android usando mi API KEY.

Por fin encontré una solución para este problema 🙂

Después de crear API_KEY en la Consola de desarrollo de Google y restringirla con "Nombre de paquete" y "Impresión de certificado SHA-1", debe proporcionar estos datos en cada solicitud de api de youtube. Debajo de los pasos:

1- get Nombre del paquete:

 String packageName = context.getPackageName(); 

2- obtener 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- Prepare el encabezado http del api de youtube:

 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- Construya su consulta de api de youtube como desee: Por ejemplo para buscar video:

 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(); 

luego procesa los resultados de búsqueda devueltos.

Intente comprobar si sigue correctamente la configuración al crear credenciales de OAuth. Y asegúrate de habilitar la API de datos de YouTube en tu consola de desarrolladores.

Aquí los pasos que usted necesita hacer.

  1. En el campo Nombre del paquete , ingrese el nombre del paquete de su aplicación para Android

  2. En un terminal, ejecute la utilidad Keytool para obtener la huella digital SHA1 para su certificado público del archivo .apk firmado digitalmente.

keytool -exportcert -alias androiddebugkey -keystore ruta-a-depuración-o-producción-keystore -list -v

  1. Pegue la huella digital SHA1 en el formulario cuando se le solicite.

También he encontrado aquí en esta pregunta SO respondida por un Googler que un usuario tiene que pasar por OAuth2. Dado que las cuentas de servicio no se admiten en Data API v3.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.