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

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

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 .

  • Oauth 2.0: identificación del cliente y secreto del cliente expuestos, ¿es un problema de seguridad?
  • Añadir Retrofit Requestinterceptor con Dagger en tiempo de ejecución
  • Integración con Android de Google+ - repetida UserRecoverableAuthException
  • ¿Un buen tutorial para usar AccountManager en Android?
  • SampleSyncAdapter que almacena la contraseña de texto sin formato?
  • ¿Twitter respalda OAuth 2.0?
  • ¿Cómo puedo enviar un mensaje a un dispositivo usando C2DM desde un servidor que ha sido autenticado con OAuth2?
  • 'Solicitud no registrada' mostrada en la pantalla de consentimiento de inicio de sesión de Google+
  • Cómo manejar el error redirect_uri_mismatch cuando la aplicación Android obtiene acceso sin conexión para el back-end de la Web?
  • Enviar objetos JSON utilizando métodos POST
  • Autenticar credenciales recibidas desde facebook en mi propia API REST
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.