You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决使用Google服务账号调用Drive Activity API无法获取共享文件夹活动记录的问题?

解决服务账号调用Google Drive Activity API无法获取活动记录的问题

我来帮你理清问题所在并给出解决方案:

核心原因

服务账号是一个独立的Google身份实体,默认情况下,调用activity.query时如果不指定具体资源,它只会查询服务账号自身Drive内的活动,而不是你共享给它的文件夹中其他用户(比如你的个人账号)的操作记录。这就是为什么你用OAuth2(代表你个人账号)能查到活动,但服务账号查不到的关键原因。

解决方案步骤

  1. 明确要查询的目标文件夹
    你需要在查询请求中指定共享文件夹的ID,告诉API要查询这个特定资源下的活动,而不是服务账号自己的全局Drive活动。

  2. 修改代码中的查询参数
    在你的PHP代码里,给QueryDriveActivityRequest添加ancestorName参数,格式为items/{文件夹ID}(把{文件夹ID}替换成你实际的共享文件夹ID)。

修改后的完整代码

$client = new Google_Client();
$client->setApplicationName('Some App');
$client->setAuthConfig( __DIR__ . '/service_account.json');
$client->setScopes(Google_Service_DriveActivity::DRIVE_ACTIVITY_READONLY);
$client->fetchAccessTokenWithAssertion();
$service = new Google_Service_DriveActivity($client);

// 替换成你的共享文件夹ID
$targetFolderId = "your-shared-folder-id-here";

// 构建查询请求,指定要查询的文件夹
$request = new Google_Service_DriveActivity_QueryDriveActivityRequest();
$request->setPageSize(10);
// 设置要查询的祖先资源(目标文件夹)
$request->setAncestorName("items/{$targetFolderId}");

$results = $service->activity->query($request);
if (count($results->getActivities()) == 0) {
    print "No activity.\n";
} else {
    // 处理活动记录
    foreach ($results->getActivities() as $activity) {
        $time = $activity->getTimestamp();
        $actors = $activity->getActors();
        $actions = $activity->getActions();
        print "Activity at {$time}: ";
        // 输出参与者和操作详情
        foreach ($actors as $actor) {
            print $actor->getUser()->getDisplayName() . " ";
        }
        foreach ($actions as $action) {
            print $action->getDetail()->getActionType() . "\n";
        }
    }
}

额外排查要点

  • 活动延迟:Drive Activity API的活动记录可能有1-5分钟的延迟,刚在文件夹里操作完不要立刻查询,稍等几分钟再试。
  • 权限确认:再次确认服务账号邮箱已经被添加为该文件夹的共享用户,并且拥有至少编辑权限(你已经设置了,这步没问题,但可以再核对下)。
  • 文件夹ID正确性:确保你填写的targetFolderId是正确的,不要包含多余的字符或路径部分(可以从Drive文件夹的URL中提取,比如https://drive.google.com/drive/folders/XXX中的XXX就是ID)。

这样修改后,服务账号就能正确查询到指定共享文件夹内的所有活动记录了,不管是你个人账号还是其他用户的操作都会被返回。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:48:12