Android Google DRIVE API V3 - 查询文件夹不返回所有文件夹

Posted

技术标签:

【中文标题】Android Google DRIVE API V3 - 查询文件夹不返回所有文件夹【英文标题】:Android Google DRIVE API V3 - query folders does not return all folders 【发布时间】:2020-08-14 14:15:11 【问题描述】:

目前我的团队正在开发 iosandroid 系统。 我们有 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创建的文件夹,是否添加了这个条件仍然看不到。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

因为iOS应用了内部调试模式,所以他可以使用.../auth/drive范围,但默认你只有.../auth/drive.file范围,它只允许你访问你的应用程序创建的内容。 详情可以参考this

【讨论】:

以上是关于Android Google DRIVE API V3 - 查询文件夹不返回所有文件夹的主要内容,如果未能解决你的问题,请参考以下文章

来自 Google Drive Android Studio API 的图像被旋转

我们可以从 Android 中的 Google Drive API 检索数据吗?

有人可以为 Google Drive REST API v3 提供最新的 Android 指南吗?

使用预建帐户登录,无需手动登录 - Android Google Drive API

是否可以从 Android API 对 Google Drive 文件进行随机访问写入?

Android Google DRIVE API V3 - 查询文件夹不返回所有文件夹