com.google.android.gms.common.api.ApiException: 17: API: Drive.API_CONNECTIONLESS не доступен на этом устройстве

Вот история. Я включил Google Диск Android SDK (8.1.0) в свое приложение (AnyCopy) около трех лет назад. И я последовал за учебником, чтобы правильно настроить, включая добавление учетных данных и ключ api. Все сработало хорошо. Я мог бы без проблем создавать резервные копии и восстанавливать свои данные. Даже сегодня он работает нормально, если я загружу его из Google Play.

Недавно я пытался реорганизовать AnyCopy и интегрировать новейший Google Android Android SDK (версия Google Play версии 12.0.1) в свое приложение и испытываю странную ошибку с сообщением

java.util.concurrent.ExecutionException: com.google.android.gms.common.api.ApiException: 17: API: Drive.API_CONNECTIONLESS не доступен на этом устройстве. в com.google.android.gms.tasks.Tasks.zzc (Неизвестный источник) в com.google.android.gms.tasks.Tasks.await (Неизвестный источник)

Однако, если я создаю новые учетные данные в Консоли Google с другим ключом подписи. И проблема решена. Я понимаю, что проблема связана с конфигурацией учетных данных. Однако я не мог понять, как его решить, поскольку это может быть ошибка обратной совместимости SDK Google Drive. Кто-нибудь еще сталкивался с этой проблемой? Любое предложение будет высоко оценено.

Ответ 1

У меня была такая же ошибка. Я создал новый проект и получил учетные данные для API Google, но забыл включить API Диска Google. Переход на панель инструментов и включение API-интерфейса google сделали трюк. Надеюсь, это поможет.

Ответ 2

В новом API, который вы используете, все еще есть экземпляры и папки более старой версии. Вы можете проверить, переключившись с Android на ваш проект и внешние библиотеки. Если есть старая версия этого api, попробуйте рефрактор и очистите проект и перестройте его. Надеюсь, это вам подходит. Несомненно, проблема обратной совместимости.

Ответ 3

Что случилось в моем случае, так это то, что я устанавливал область полномочий, отличную от областей, которые поддерживал объект DriveClient, это только файлы drive.file и drive.appfolder, как вы видите здесь:

Примечание. В настоящее время API Android на Google Диске поддерживает только области авторизации drive.file и drive.appfolder. Если вашему приложению требуются дополнительные разрешения или функции, недоступные в API Android для Android, вы должны использовать Java API Java API.

В моем случае я пытался использовать полный доступ к диску, и ошибка не была действительно связана с типом соединения. Я нашел его, посмотрев на класс CommonStatusCodes.

Чтобы решить это, я просто удалил все остальные области и оставил только файл drive.file. Вы можете или не можете: D, нужно отменить доступ и вывести пользователей из вашего приложения и снова войти в систему и снова запросить доступ к их Google Drive.

Если вы используете firebase, ваш код будет выглядеть примерно так:

AuthUI.IdpConfig.GoogleBuilder()
                    .setScopes(Arrays.asList(Scopes.DRIVE_FILE))
                    .build()

Но если вы используете только прямой файл GoogleSignInClient, это будет выглядеть так:

GoogleSignInOptions signInOptions =
            new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestScopes(Drive.SCOPE_FILE)
                    .build();
GoogleSignIn.getClient(this, signInOptions)

Если вам нужно больше, чем просто доступ к файлам и папке приложений, вы не сможете использовать класс DriveClient и, согласно их документам, необходимо будет подключиться и авторизировать с помощью API-интерфейсов API Google API.

Я действительно надеюсь, что это поможет, я потерял несколько часов, пока не заметил, что, к сожалению.

Спасибо,