He integrado Google Drive en mi aplicación. Para lograr la sincronización, también configuré notificaciones push para cada cuenta siguiendo los pasos en el enlace https://developers.google.com/drive/v3/web/push

A continuación se muestra el código de Java para configurar el reloj en todos los archivos de la cuenta

String uuid = UUID.randomUUID().toString(); 
                Channel channel = new Channel(); 
                channel.setId(uuid);
                channel.setType("web_hook");
                channel.setAddress(env.getProperty("webhookUrl"));
                StartPageToken pageToken = service.changes().getStartPageToken().execute();
                Channel response = service.changes().watch(pageToken.getStartPageToken(), channel).execute();

Al realizar cambios en la unidad de Google real, recibo la notificación en la URL del webhook configurada anteriormente.

Pero el problema es que para cada cambio, obtengo los mismos valores para los encabezados a continuación que son los mismos que la respuesta de la llamada de vigilancia y No recibo ningún encabezado de solicitud adecuado que corresponda al cambio o al cuerpo de la solicitud

//Getting request headers
    String resourceId = request.getHeader("X-Goog-Resource-ID");
    String resourceState = request.getHeader("X-Goog-Resource-State");
    String expiration = request.getHeader("X-Goog-Channel-Expiration");
    String resourceChanges = request.getHeader("X-Goog-Changed");
    String channelId = request.getHeader("X-Goog-Channel-ID");

¿Alguien puede decirme cómo obtengo los datos de notificación correctamente? ¿Hay algo que estoy haciendo mal?

Aquí está el mismo problema planteado por otra pregunta que aún no tiene la respuesta adecuada Recibiendo notificaciones push de Google Drive

0
Aarish Ramesh 13 feb. 2017 a las 21:58

2 respuestas

La mejor respuesta

En realidad, no hay un cuerpo de solicitud que se envíe en la notificación de webhook. Por lo tanto, tan pronto como lleguen los cambios en la URL de devolución de llamada, los cambios se obtendrán mediante una solicitud de obtención de cambios de uri de recursos

Resource URI : https://www.googleapis.com/drive/v3/changes?includeRemoved=true&pageSize=100&pageToken=895&restrictToMyDrive=false&spaces=drive&alt=json

O los cambios programáticos se pueden obtener utilizando el siguiente código

String pageToken = channelInfo.getCurrPageToken();
            List<Change> changes = service.changes().list(pageToken)
                    .execute().getChanges();

El documento de notificaciones push de Google podría haber mencionado esto claramente en lugar de mencionar que los cambios vienen en el cuerpo de la solicitud, lo que es motivo de confusión

2
Aarish Ramesh 26 feb. 2017 a las 20:09

No entiendo por qué estás mirando los encabezados del mensaje webhook. Es el cuerpo que le interesa, como se describe en https: // developers. google.com/drive/v3/reference/files/watch.

Una vez que tenga la ID del archivo modificado, si desea detalles de lo que ha cambiado, puede usar las revisiones https://developers.google.com/drive/v3/web/manage-revisions feed para ver los detalles.

2
pinoyyid 13 feb. 2017 a las 23:21