UsingOAuth2 obsoleta?
He estado trabajando en una aplicación de Android que utiliza Google Drive API. Originalmente se construyó a partir del ejemplo de quickstart aquí . La secuencia simplificada de llamadas de la API (con el manejo apropiado de errores no mostrado aquí) es:
GoogleAccountCredential cred = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE_FILE); cred.setSelectedAccountName("..."); Drive drvSvc = new Drive.Builder (AndroidHttp.newCompatibleTransport(), new GsonFactory(), cred).build(); FileList gooLst = drvSvc.files().list().setMaxResults(MAX_DOWN).setQ(_rqst).execute();
Ha estado funcionando bien y estoy a punto de lanzar mi aplicación. Pero de repente, después de la actualización de Drive API, recibo una advertencia
- ¿Cómo desconectar un usuario de Google en mi aplicación de Android en botón Haga clic en Java?
- La mejor forma de permitir a los usuarios acceder a la aplicación mediante sus credenciales de Google
- Error al recuperar el token de acceso de OAuth 2.0 en el emulador de Android
- Librería / marco apropiado de Oauth2 del androide
- Autorización Oauth 2.0 para LinkedIn en Android
El método usingOAuth2 (Context, String, String …) del tipo GoogleAccountCredential está obsoleto
¿Que está pasando? ¿Hay otra manera de obtener credenciales? ¿Hay una versión editada del ejemplo de inicio rápido disponible en cualquier parte?
Gracias de antemano por cualquier aclaración. Sean
- Google Plus SignIn / oAuth2 - lanzamiento del lado del servidor TokenResponseException: 401 no autorizado
- ¿Ejecutar una secuencia de comandos de Google Apps desde la aplicación para Android?
- Javamail api en android usando XOauth
- En Google App Engine, ¿puedo relacionar un Token de Google OAuth 2 y un símbolo de SACSID que obtuve con el AccountManager de Android?
- Android Jtwitter, problemas de autenticación
- Obtener tiempo de caducidad de token de acceso de Google en Android
- ¿Cómo obtener la huella digital del certificado de firma (SHA1) para OAuth 2.0 en Android?
- Intento del navegador y regreso a la actividad correcta (ficha abierta)
Por lo tanto, la respuesta simple a mi propia pregunta es
reemplazar:
GoogleAccountCredential crd = GoogleAccountCredential.usingOAuth2 (esto, DriveScopes.DRIVE_FILE);
con
GoogleAccountCredential crd = GoogleAccountCredential.usingOAuth2 (esto, Arrays.asList (DriveScopes.DRIVE_FILE));
Por completitud
Supongo que llegaste a esta excepción siguiendo el ejemplo de código de Google Drive QuickStart . Si es así usted puede encontrar las siguientes cosas que tuve que modificar interesante.
Lib de Google Play Services (Nota: vea el comentario abajo)
La documentación utiliza la antigua forma de agregar bibliotecas a un proyecto de Android. Esto fallará cuando se ejecute con el ADT más reciente. Usted será capaz de compilar y subir al dispositivo / emulador pero en la ejecución obtendrá un NoClassDefFoundError.
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/AccountPicker;
Para corregir esto, debe copiar pegar el archivo google-play-services.jar
en la carpeta libs
lugar.
Meta-tag que falta
Hasta el siguiente error. Luego recibí una IllegalStateException
con las instrucciones para agregar una meta-etiqueta en el manifiesto que contiene la versión de google-play-services.
Así que dentro de la etiqueta de aplicación del manifiesto agrega:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
Y en uno de los archivos de recursos ( res/values/a-file-here.xml
) agregue lo siguiente:
<integer name="google_play_services_version">4030500</integer>
En mi caso el lib coincidió con esta versión. Si ingresa la versión incorrecta aquí, obtendrá un error al mostrar la versión adecuada para especificar. Así que asegúrese de comprobar la salida.
Permiso denegado
Finalmente conseguí un aviso para oauth en la aplicación apenas para descubrir el ejemplo que la aplicación todavía está faltando un permiso. El error de referencia:
java.io.FileNotFoundException: /storage/emulated/0/Pictures/IMG_20131211_110629.jpg: open failed: EACCES (Permission denied)
Junto a los permisos enumerados en el ejemplo:
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.INTERNET" />
También agrega el permiso WRITE_EXTERNAL_STORAGE en tu manifiesto:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Más recursos
Si obtienes una excepción com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
con la raíz causa en alguna parte una descripción Unknown
deberías comprobar la configuración en la consola de la API de Google . He recibido este error en un paquete no coincidente.
Otros enlaces de interés son la documentación oauth2 y el parque de juegos google api .
- Cambiar el icono del marcador durante el tiempo de ejecución
- Jerarquía de estilo en Android – ¿cuál es el orden de importancia?