用户断开驱动器中的应用程序导致文件范围内的数据丢失
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 范围的网络应用程序)。
感谢您的耐心等待。
第一期是:
- 用户通过以下方式撤销授权:设置 > 管理应用程序 > 断开与驱动器的连接
- 然后重新授权该应用程序
- 此应用有权在 DRIVE_FILE 范围内查看的文件不再被授权。
这是 REST 和 Android API 的预期行为。
我们认为用户不会直觉地期望所有以前授权的文件都被重新授权。用户可能不记得以前授权过的文件,通知用户这些文件将要再次授权很可能会造成混淆。
第二个问题是 GDAA 在这种情况下创建文件夹的行为。我们目前不支持文件夹创建的 CompletionEvents,但这是我们会研究的内容。
我已经 运行 解决过这个问题几次,但我从来没有把矛头指向它,将其归咎于 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 范围的网络应用程序)。
感谢您的耐心等待。
第一期是:
- 用户通过以下方式撤销授权:设置 > 管理应用程序 > 断开与驱动器的连接
- 然后重新授权该应用程序
- 此应用有权在 DRIVE_FILE 范围内查看的文件不再被授权。
这是 REST 和 Android API 的预期行为。
我们认为用户不会直觉地期望所有以前授权的文件都被重新授权。用户可能不记得以前授权过的文件,通知用户这些文件将要再次授权很可能会造成混淆。
第二个问题是 GDAA 在这种情况下创建文件夹的行为。我们目前不支持文件夹创建的 CompletionEvents,但这是我们会研究的内容。