Android Google DRIVE API V3 - папки запросов не возвращают все папки - PullRequest
0 голосов
/ 30 апреля 2020

В настоящее время моя команда работает над системами iOS и Android. У нас есть 2 отдельных приложения, и наша идея - использовать Google Drive в качестве ретранслятора данных. То есть наше приложение Android упаковывает zip-файл, загружает его в Google Drive, а затем приложение iOS загружает его для дальнейшей обработки.

Наша команда делится учетной записью Google, поэтому данные загружены и загружены из той же учетной записи Google.

Я следовал инструкциям по входу в учетную запись Google: https://developers.google.com/identity/sign-in/android/sign-in

И я также связал мое приложение в консоли API Google. (Устанавливая учетные данные с помощью ключа SHA5 моего приложения.) Мое приложение теперь может загружать файлы и создавать папки на Google Диске с помощью Drive API. Однако, когда я хочу перечислить все папки на Google Диске, я обнаружил, что мое Android приложение может ТОЛЬКО видеть созданные им папки. Я изменил условие запроса на файлы, и он также может возвращать ТОЛЬКО загруженные файлы.

Я спросил моего коллегу, который реализует приложение iOS и использует версию Drive API iOS. Он говорит, что его iOS приложение может видеть ВСЕ папки и файлы в хранилище 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 приложением, пока не обнаружено, добавлено ли это условие.

Спасибо за любую помощь заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...