用户断开驱动器中的应用程序导致文件范围内的数据丢失

User disconnecting app in Drive causes loss of data under FILE scope

我已经 运行 解决过这个问题几次,但我从来没有把矛头指向它,将其归咎于 GDAA's 延迟、我的错误代码等...我终于解决了想出一个我可以安全地重现它的场景,所以我想问 知道的人 它是我不理解的功能还是一个普通的错误。如果是后者,请指出我可以唠叨的地方。

为了简单起见,我将在 REST API 的背景上讨论它。

1/ 让我们有一个 Drive API 经过身份验证的应用程序 运行 在 DRIVE_FILE 范围

com.google.api.services.drive.Drive svc = 
  new Drive.Builder(
    AndroidHttp.newCompatibleTransport(), 
    new GsonFactory(),
    GoogleAccountCredential
    .usingOAuth2( context, Collections.singletonList(DriveScopes.DRIVE_FILE))
  ).build();

2/ 使用

在 Google 驱动器中创建一个文件 (files/folders)
svc.files().insert([METADATA], [CONTENT]).execute();

3/ 搜索您使用

创建的对象
svc.files().list().setQ([QUERY]).setFields([FIELDS]).execute();

当应用程序 运行 时,用户通过通常的 Account-Pick / Drive-Authorize 例程,一切都按预期进行。文件被创建、可见、可被找到...直到用户通过

撤销授权

Settings > Manage Apps > Disconnect From Drive

drive.google.com

之后,如果 Android 应用程序重新启动(并重新授权),在撤销之前创建的对象中的 none 是可见的。

这可能是设计使然,我不知道。如果是这种情况,我找不到 Android 应用程序如何访问它之前创建的任何内容的方法。我当然可以创建另一个具有 DRIVE 范围的 'maintenance' 应用程序来解决这个问题,但是...

现在,在 GDAA 的情况下,情况会变得更糟。不仅 GDAA 没有 DRIVE 范围来修复它,而且如果完成相同的步骤序列并且应用程序在撤销后立即创建 file/folder,GDAA 不会抱怨,但 file/folder 不会完全创建。一段时间(几分钟)后,重新授权弹出窗口,但同时创建的文件仍然无处可寻,撤销之前的所有内容也丢失到(创建者)应用程序中(它当然在显然具有类似 DRIVE 范围的网络应用程序)。

感谢您的耐心等待。

第一期是:

  1. 用户通过以下方式撤销授权:设置 > 管理应用程序 > 断开与驱动器的连接
  2. 然后重新授权该应用程序
  3. 此应用有权在 DRIVE_FILE 范围内查看的文件不再被授权。

这是 REST 和 Android API 的预期行为。

我们认为用户不会直觉地期望所有以前授权的文件都被重新授权。用户可能不记得以前授权过的文件,通知用户这些文件将要再次授权很可能会造成混淆。

第二个问题是 GDAA 在这种情况下创建文件夹的行为。我们目前不支持文件夹创建的 CompletionEvents,但这是我们会研究的内容。