Notificaciones de la API REST de Google Drive no funcionan para cambios en la carpeta de aplicaciones
De acuerdo con la documentación, debería ser posible registrar un canal de notificación para los cambios en la carpeta de aplicaciones de mi aplicación, usando setSpaces("appDataFolder")
.
Sin embargo, solo recibo una notificación de sync
inicial al configurar el canal, pero no change
notificaciones cuando cambio algo en la carpeta de la aplicación.
- Error de Retrofit de Android al generar una solicitud
- Cómo implementar OAuth 2.0 como autenticación basada en tokens para API de reposo a la que se accede desde aplicaciones web móviles y javascript
- Cómo POST JSON todo en bruto en el cuerpo de una solicitud de Retrofit?
- Autenticación Digest con Volley? ¿Es posible?
- ¿Cómo usar el retrofit como singleton mientras se usa el convertidor de gson?
Si utilizo setSpaces("drive")
o setSpaces()
el setSpaces()
completo y cambio algo en el espacio regular de la unidad, recibo notificaciones de change
.
No encontré nada acerca de ver los cambios en la carpeta de la aplicación, así que espero que alguien aquí me pueda ayudar.
Así es como configuro el canal, donde mDrive
es una instancia totalmente autorizada y autorizada de com.google.api.services.drive.Drive
channelId = UUID.randomUUID().toString(); channelExpiration = System.currentTimeMillis() + CHANNEL_LIVETIME_MILLIS; Channel channel = new Channel(); channel.setType("web_hook"); channel.setId(channelId); channel.setAddress(DRIVE_API_CALLBACK_RECEIVER_URL); channel.setToken("..."); channel.setExpiration(channelExpiration); Channel result = mDrive.changes().watch(channel).setSpaces("appDataFolder").execute();
- Adaptador de sincronización sin cuenta
- REST y SOAP webservice en android
- Retrofit 1.6: Call RestService con diferentes (TCP) -Ports
- Google Cloud Speech API: Reconocimiento en tiempo real a través de REST
- ¿Cómo realizar una solicitud DELETE sin tipo de devolución o devolución de llamada?
- Retrofit: 500 error de servidor interno
- Cómo inhabilitar la solicitud de Volley de volver a intentarlo?
- ¿Cómo hacer frente a múltiples puntos finales de API usando Retrofit?
¿Hay un ámbito en el que configurar esto? Asegúrese de tener un alcance lo suficientemente amplio para incluir 'appDataFolder'. Con esto quiero decir que usted debería ser capaz de obtener algunos resultados de esto (de aquí ):
/** * Print metadata for the Application Data folder. * * @param service Drive API service instance. */ private static void printApplicationDataFolderMetadata(Drive service) { try { File file = service.files().get("appfolder").execute(); System.out.println("Id: " + file.getId()); System.out.println("Title: " + file.getTitle()); } catch (IOException e) { System.out.println("An error occured: " + e); } }
Creo que lo anterior podría ser su problema. Sea cual sea su ámbito de aplicación, asegúrese de incluir el drive.appfolder
o más formalmente
https://www.googleapis.com/auth/drive.appfolder
Además, ¿está comprobando si el resultado es nulo? Deberías poner la línea Channel result =...
line en un try {} catch(IOExeption e) {}
e imprimir el error si hay uno como en este ejemplo (desde aquí ).
/** * Watch for all changes to a user's Drive. * * @param service Drive API service instance. * @param channelId Unique string that identifies this channel. * @param channelType Type of delivery mechanism used for this channel. * @param channelAddress Address where notifications are delivered. * @return The created channel if successful, {@code null} otherwise. */ private static Channel watchChange(Drive service, String channelId, String channelType, String channelAddress) { Channel channel = new Channel(); channel.setId(channelId); channel.setType(channelType); channel.setAddress(channelAddress); try { return service.changes().watch(channel).execute(); } catch (IOException e) { e.printStackTrace(); // ADD A LOG OR PRINT STATEMENT HERE Log.e("DRIVEAPI", "Error: " + e.toString()) } return null; }
Que para usted código debe verse así:
channelId = UUID.randomUUID().toString(); channelExpiration = System.currentTimeMillis() + CHANNEL_LIVETIME_MILLIS; Channel channel = new Channel(); channel.setType("web_hook"); channel.setId(channelId); channel.setAddress(DRIVE_API_CALLBACK_RECEIVER_URL); channel.setToken("..."); channel.setExpiration(channelExpiration); try { Channel result = mDrive.changes().watch(channel).setSpaces("appDataFolder").execute(); if(result != null) { // do whatever you want with result Channel } else { Log.e("DRIVEAPI", "Error: result is null for some reason!"); } } catch (IOException e) { e.printStackTrace() Log.e("DRIVEAPI", "Error: " + e.toString()); }