java - Google Drive Webhook 通知请求正文为空

标签 java spring push-notification google-drive-api webhooks

我已将 Google Drive 集成到我的应用程序中。为了实现同步,我还按照链接https://developers.google.com/drive/v3/web/push中的步骤为每个帐户配置了推送通知。

下面是配置对帐户的所有文件进行监视的 java 代码

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

在实际的 google 驱动器中进行更改时,我会在上面配置的 webhook url 中收到通知。

但问题是对于每次更改,我都得到以下 header 的相同值,这些值与 watch 调用的响应相同&我没有获得与更改或请求正文相对应的任何正确的请求 header

//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");

有人可以告诉我如何正确获取通知数据吗?我做错了什么吗?

这是另一个问题提出的相同问题,但还没有正确的答案 Receiving Google Drive Push Notifications

最佳答案

实际上,Webhook 通知中没有发送请求正文。因此,一旦更改到达回调 url,就可以通过向更改资源 uri 发出 get 请求来获取更改

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

或者可以使用以下代码以编程方式获取更改

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

Google 推送通知文档本可以清楚地提及这一点,而不是提及请求正文中出现的更改,这是造成困惑的原因

关于java - Google Drive Webhook 通知请求正文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211509/

相关文章:

android - FCM 通知未打开预期的 Android Activity

java - 无法为 log4j 设置 LevelRangeFilter

angularjs - GET 请求在本地工作,在测试服务器上返回 HTTP 406

c# - 如何使用带有自定义应用程序启动的 MvvmCross 从推送通知启动关闭的应用程序

java - 如何发送 GCM 消息

java - Spring MVC 中的 session

java - 哪条路是最好的路?使用 null 重复 VS

java - 如何在 NetBeans 平台项目(插件)中正确处理文件保存

java - Maven还是 Ivy ?对于已经投入生产的系统,哪一个更好?还有其他的区别?

java - 优化获取参数值