我按照以下步骤为我的服务帐户设置了网络通知
在我的应用程序的开发者控制台中的域验证下添加了我的回调域
使用以下代码注册我的应用程序的Web挂钩
java.io.File file = new java.io.File("/xyz.p12");
FileInputStream fis = new FileInputStream(file);
PrivateKey serviceAccountPrivateKey = SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.getPkcs12KeyStore(), fis, "notasecret", "privatekey", "notasecret");
JsonFactory jsonFactory = new JacksonFactory();
HttpTransport t = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential gc = new GoogleCredential.Builder().setTransport(t)
.setJsonFactory(jsonFactory)
.setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
.setServiceAccountPrivateKey(serviceAccountPrivateKey)
.setServiceAccountId("xyz")
.setServiceAccountUser("abc")
.build();
Drive drive = new Drive.Builder(t, jsonFactory,null).setHttpRequestInitializer(gc)
.setApplicationName("xyz").build();
Channel channel = new Channel();
String uid = UUID.randomUUID().toString();
System.out.println(" UID :: " + uid);
channel.setId(uid);
channel.setType("web_hook");
channel.setAddress("--- Callback URL");
StartPageToken pageToken = drive.changes().getStartPageToken().execute();
Channel c = drive.changes().watch(pageToken.getStartPageToken(), channel).execute();
代码运行成功,我也接到了webhook的调用作为注册的一部分(可能是)。
但是当我对集成到我的应用程序的驱动器帐户中的驱动器文件进行更改时,我没有收到webhook通知。有人可以告诉我,我是否在这个过程中遗漏了什么?
顺便说一下,我引用了这个问题的代码
Google push notifications - Unauthorized WebHook callback channel
答案 0 :(得分:0)
请注意,除非当前用户或服务帐户拥有或有权访问此资源,否则观看请求将无法成功,如documentation所述。
每个可观看的Drive API资源都在以下格式的URI中具有关联的监视方法:
POST
要为有关特定资源更改的消息设置通知渠道,请向资源的
watch
方法发送{{1}}请求。
您还可以查看此related SO post,这也是未收到来自Google云端硬盘的网络快讯通知。建议的行动是delegate domain-wide authority to your service account。