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

sea*_*npj 5 google-drive-api google-drive-android-api

我已经遇到过这个问题几次了,但我永远都不会指责它,把它归咎于GDAA的延迟,我的错误代码等......我终于想出了一个我可以安全地重现它的场景,所以我想问一下那些知道这是我不理解的功能还是一个普通错误的人.如果是后者,请指出我可以唠叨的地方.

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

1 /让我们拥有一个在DRIVE_FILE范围内运行的Drive API认证应用

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

2 /使用在Google驱动器中创建文件(文件/文件夹)

svc.files().insert([METADATA], [CONTENT]).execute();
Run Code Online (Sandbox Code Playgroud)

3 /搜索您使用的对象

svc.files().list().setQ([QUERY]).setFields([FIELDS]).execute();
Run Code Online (Sandbox Code Playgroud)

当应用程序运行时,用户将执行通常的Account-Pick/Drive-Authorize例程,一切都按预期工作.创建文件,可见,可以找到......直到用户通过以下方式撤销授权

设置>管理应用>断开驱动器

drive.google.com中.

之后,如果Android应用程序重新启动(并重新授权),则撤消之前创建的任何对象都不可见.

可能是设计,我不知道.如果是这种情况,我无法找到Android应用程序如何获取之前创建的任何内容.我当然可以使用DRIVE范围创建另一个"维护"应用来解决这个问题,但......

现在,就GDAA而言,它变得更糟.不仅GDAA没有DRIVE范围来修复它,而且如果完成相同的步骤序列并且应用程序在撤销后立即创建文件/文件夹,GDAA不会抱怨,但根本不会创建文件/文件夹.过了一会儿(分钟),重新授权弹出,但是,同时创建的文件无处可寻,撤销之前的所有内容都会丢失给(创建者)应用程序(它当然可见显然具有DRIVE范围的Web应用程序).

谢谢你的耐心等待.

小智 3

第一个问题是:

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

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

我们认为用户不会直观地期望所有先前授权的文件都被重新授权。用户可能不记得之前授权的文件,并且通知用户这些文件将被再次授权可能会造成混乱。

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