当前位置: 首页 > 知识库问答 >
问题:

使用服务帐户创建推送通知的Google Drive频道

裴威
2023-03-14

我正在尝试创建一个频道,以便在谷歌电子表格上进行编辑时接收推送通知。该代码将在App Engine标准Java8项目上执行。

因为一个频道最多可以持续24小时,所以我正在创建一个cron,它将每天更新频道。

以下是我的配置:

  • 我创建了一个服务帐户:<代码>xxxx@yyyy.iam.gserviceaccount.com
  • 我验证了域:<代码>yyyy。appspot。com(在网站管理员工具中)
  • 我将该域添加到云控制台(API部分

使用Java库google-api-services-drive: v3-rev 102-1.23.0我创建了这个代码

public static void main(String[] args) throws IOException {
    String spreadsheetId = "foo_bar";
    InputStream json = GoogleDriveApi.class.getClassLoader().getResourceAsStream("bar.json");

    GoogleCredential credential = GoogleCredential.fromStream(json, new NetHttpTransport(), new JacksonFactory());
    if (credential.createScopedRequired()) {
        credential = credential.createScoped(Collections.singleton("https://www.googleapis.com/auth/drive.appdata"));
    }

    Drive service = new Drive.Builder(new NetHttpTransport(), new JacksonFactory(), credential).build();

    Channel channel = new Channel();
    channel.setAddress("https://example.com/api/drive/push");
    channel.setType("web_hook");
    channel.setId(UUID.randomUUID().toString());

    Watch action = service.files().watch(spreadsheetId, channel);
    System.out.println(action.execute().toPrettyString());
}

当我执行此代码时,会出现以下错误:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
  "code" : 404,
  "errors" : [ {
    "domain" : "global",
    "location" : "fileId",
    "locationType" : "parameter",
    "message" : "File not found: foo_bar.",
    "reason" : "notFound"
  } ],
  "message" : "File not found: foo_bar."
}

从我引用的文档中

每个通知通道都与特定用户和特定资源(或一组资源)相关联。除非当前用户或服务帐户拥有或有权访问此资源,否则监视请求将不会成功。

在我的情况下,服务帐户不拥有资源(电子表格),但确实对其拥有权限(可以编辑权限,而不仅仅是可以查看权限)

是否可以使用服务帐户在Google Drive上创建频道?


共有1个答案

谢璞
2023-03-14
匿名用户

<代码>文件。监视API要求https://www.googleapis.com/auth/drivescope,在主要示例中,我只使用了https://www.googleapis.com/auth/drive.appdata

使用下面的行,该示例可以很好地工作

credential = credential.createScoped(Collections.singleton("https://www.googleapis.com/auth/drive"));

 类似资料:
  • 尊敬的谷歌日历团队:, 我们想为日历开发推送通知。我已经看完了这篇文章https://developers.google.com/google-apps/calendar/v3/push. 但我有几个问题:- 我们也有C语言的日历消息推送吗? 如何获取通知通道id? 域在这种情况下是什么意思?域将始终gmail.com。 你能分享一个可以显示日历工作消息推送的示例吗? -拉胡尔

  • 问题内容: 简短: 是否有一种方法可以将数据从服务器推送到已登录的用户会话,而无需该用户发出HTTP请求? Long(er): 我正在Apache / PHP / MySQL服务器上构建HTML5应用程序,可以将其提供给移动设备上的用户(或可能通过PhoneGap应用程序)。 我想让用户知道应用程序中何时有可用的新信息,而不会通过强迫该用户执行对服务器的调用或要求AJAX调用来增加过多的数据费用(

  • 我编写了一个RESTAPI。NET Core现在需要创建一个推送通知到Firebase Cloud Messaging(FCM)。对于测试,我使用Firebase控制台,但我需要通过编程来完成。我已经通过谷歌浏览了Firebase的文档和一些例子,但我更困惑了。 我认为可以通过常规创建消息,但有人可以发布一个简单的工作示例以便我可以拿起它吗?或者也许,我的理解完全错误?

  • 我正在使用新的Firebase平台。我试图让我的应用程序服务器发送消息推送到我的iPhone。 我的设置正在运行,我在网站上的Firebase通知区域手动发送消息,但当我尝试将消息发送到https://fcm.googleapis.com/fcm/send 我没有收到发送到设备的消息。 我正在发送以下内容(带有auth头) 我从POST得到了200个响应,有以下身体: 如果我尝试直接通过Fireb

  • 在我的iOS应用程序中,我需要通知用户远程设备上的一些紧急事件。无论应用程序的状态如何,用户都需要获得警报:如果应用程序处于前台、后台模式,甚至被杀死。 根据Apple文档,只有“voip”后台模式允许“保持活动”功能在后台与服务器保持连接。但“voip”模式只允许用于真正的voip应用程序,我的应用程序不提供任何voip服务。因此,我认为我的案例的唯一选择是使用Apple推送通知。 当用户的iO

  • 是否可以使用服务帐户创建共享驱动器?。 由于没有UI服务号创建文件/文件夹,我需要一些方法 /APIs支持创建共享驱动器。 我可以在服务号下创建孩子(文件和文件夹),但不确定如何使用服务号创建共享驱动器。 向你问好,索拉夫