【发布时间】:2020-08-14 14:15:11
【问题描述】:
目前我的团队正在开发 iOS 和 Android 系统。 我们有 2 个单独的应用程序,我们的想法是 - 使用 Google Drive 作为数据中继。 也就是我们的Android App打包一个zip文件,上传到Google Drive, 然后 iOS App 下载它以进行进一步处理。
我们的团队正在共享一个 Google 帐户,因此数据会上传到同一个 Google 帐户并从同一个 Google 帐户下载。
我遵循了如何使用 Google 帐户登录的教程: https://developers.google.com/identity/sign-in/android/sign-in
我还在 Google API 控制台中链接了我的应用程序。 (通过使用我的应用程序的 SHA5 密钥建立凭据。) 我的应用程序现在能够使用 Drive API 将文件上传到 Google Drive 并在 Google Drive 上创建文件夹。 但是,当我想列出 Google Drive 上的所有文件夹时, 我发现我的 Android 应用可以仅看到它创建的文件夹。 我把查询条件改成了文件,也只能返回自己上传的文件。
我问我的同事谁实现了 iOS 应用程序并使用了 iOS 版本的 Drive API。 他说他的 iOS 应用可以看到 ALL Google 云端硬盘存储空间中的文件夹和文件。 而且我们的两个应用都还处于调试阶段(不在应用商店或发布模式)。
我错过了什么吗?或者这是某种隐私保护机制?
这是我的 Java 查询代码:
void queryAllFolders() {
if(isReady()) {
Task<FileList> queryAllFoldersTask = queryAllGoogleDriveFolders();
if(queryAllFoldersTask != null) {
queryAllFoldersTask.addOnCompleteListener(this::onQueryAllFoldersCompleted);
queryAllFoldersTask.addOnFailureListener(this::onQueryAllFoldersFailed);
}
}
}
private Task<FileList> queryAllGoogleDriveFolders() {
try{
return Tasks.call(mExecutor, () -> {
// Retrieve the metadata as a FileList object.
String pageToken = null;
FileList result;
do {
mLogger.debug("[queryAllGoogleDriveFolders] start query");
result = mDriveService.files().list()
.setQ("mimeType='application/vnd.google-apps.folder' and trashed=false")
.setSpaces("drive")
.setFields("nextPageToken, files(id, name)")
.setPageToken(pageToken)
.execute();
for (File file : result.getFiles()) {
mLogger.debug("[queryAllGoogleDriveFolders] Found folder: " + file.getName() + " with ID: " + file.getId());
}
pageToken = result.getNextPageToken();
} while (pageToken != null);
return result;
});
} catch (Exception e) {
mLogger.error("[queryAllGoogleDriveFolders] Error querying Google Drive folders: " + e.getLocalizedMessage());
e.printStackTrace();
if(onQueryAllFoldersFailedCallback != null) { onQueryAllFoldersFailedCallback.run(); }
return null;
}
}
“trashed=false”不影响查询结果——其他不是我的Android App创建的文件夹,是否添加了这个条件仍然看不到。
提前感谢您的帮助。
【问题讨论】:
标签: java android google-drive-android-api