Как использовать GoogleDrive из приложения Android с помощью пользовательского интерфейса FireBase Auth?

Я реализовал аутентификацию Firebase в своем приложении, используя Google Provider и "https://www.googleapis.com/auth/drive.appdata», чтобы мое приложение могло получить доступ к папке своего приложения на Google Диске.

Эта часть работает нормально, и я получаю FireBaseUser после завершения аутентификации. Теперь я хочу получить доступ к моему хранилищу приложений на Google Диске, но я не знаю, как это сделать, используя результат текущей аутентификации.

Я пытался следовать этому: https://github.com/gsuitedevs/java-samples/blob/master/drive/quickstart/src/main/java/DriveQuickstart.java

Но это не работает на Android. Основная проблема заключается в том, как создать объект Credentials. Есть ли у вас какие-либо идеи о том, как инициализировать экземпляр Drive.Builder, чтобы я мог записывать/читать в папку Google Диска приложения?

Спасибо


person user1026605    schedule 22.01.2020    source источник


Ответы (1)


Это невозможно сделать напрямую, потому что логин Firebase и Google не совпадают, даже если вы вошли в Firebase с учетной записью Google. В то же время на Android имеется только «последний вход в учетную запись Google», доступная для диска пользователя (тот, что на устройстве, который не имеет ничего общего с аутентификацией Firebase, где Google может использоваться только как «Поставщик аутентификации»).

Таким образом, обычно у вас есть два варианта:

  • Предоставьте сервисному аккаунту GCP доступ к Drive API и используйте Облачные функции, чтобы получить к нему доступ.

  • Вместо этого используйте Облачное хранилище, которое находится в экосистеме Firebase и похоже на Диск.

Я также мог бы подумать о комбинированном подходе к решению, когда пользователи будут использовать облачное хранилище (вместе с аутентификацией Firebase) и иметь облачную функцию, которая использует учетную запись службы, например. копирует или перемещает загруженные файлы в папку на вашем Диске.

Что касается этого (очевидно, серверного) примера Java, credentials.json явно намекает на учетную запись службы... и именно отсюда вы можете получить этот файл. Однако для Android это довольно бесполезно, потому что это имеет серьезные последствия для безопасности, чтобы упаковать учетные данные служебной учетной записи в простой для декомпиляции пакет и распространить его в Интернете (для всех). Google Play Store, скорее всего, не позволит вам опубликовать или даже загрузить это, потому что существуют проверки безопасности. В лучшем случае вы можете развернуть этот код только как модуль App Engine, но не как модуль Android.

Извините, что разрушил ваши заблуждения и не смог предоставить готовое решение для 500 воображаемых интернет-точек, которые ничего не платят - но, по крайней мере, я могу сказать, что технически возможно, а что нет - что эффективно может сэкономить вам много времени, пытаясь совершить невозможное.

person Martin Zeitler    schedule 28.01.2020