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.

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

¿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()); } 
  • REST y SOAP webservice en android
  • ¿Cómo realizar una solicitud DELETE sin tipo de devolución o devolución de llamada?
  • Google Cloud Speech API: Reconocimiento en tiempo real a través de REST
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.