Убери из этой статьи

В этой статье вы узнаете, как получить доступ к данным на пользовательском диске Google через API Google Диска. Сначала мы начнем с доступа к существующим файлам на диске, затем продолжим загрузку нового файла и, наконец, как загрузить файл с диска.

Введение

В эту современную эпоху практически все приложения для Android нуждаются в каком-то хранилище, в котором они могут хранить данные, относящиеся к пользователям. С ростом паранойи безопасности пользователи больше не доверяют удаленным серверам. С другой стороны, быстрое распространение использования Интернета вынуждает компании увеличивать объемы хранения, что не идеально для каждой компании.

Возьмем, к примеру, Whatsapp: резервные копии всех ваших чатов будут сохраняться на вашем диске Google через определенные промежутки времени. Это позволяет пользователям хранить личные данные чата при себе и избегать таких компаний, как Whatsapp, которые занимаются пространством для хранения.

Я черпал вдохновение из WhatsApp в том, как они использовали существующее пространство для хранения, и решил одну из основных проблем в бизнес-модели. Это WIN-WIN как для WhatsApp, так и для его пользователей. Поэтому я решил интегрировать Google Диск в одно из моих следующих приложений для управления пользовательскими данными.

Эта статья представляет собой заметку разработчика о том, что я узнал, когда исследовал, как интегрировать Google Drive API в приложения для Android.

Предпосылки

Пользователь должен пройти аутентификацию через Google Sing-in. Я написал подробную статью об этом, пожалуйста, прочтите ее и убедитесь, что пользователь вошел в систему, прежде чем идти дальше.



Имея немного знаний о Kotlin Coroutiens, мы используем область сопрограмм для безопасного выполнения операций с диском, а также для упрощения части кодирования. Если вы новичок в сопрограммах, я рекомендую вам перейти по следующим ссылкам.



Добавьте Интернет-разрешение в файл манифеста на уровне приложения.

<uses-permission android:name="android.permission.INTERNET" />

Интеграция

Теперь, когда мы закончили с аутентификацией Google, следующей частью является интеграция Google Drive API. Добавьте следующие строки в узел зависимостей внутри файла gradle уровня приложения:

Создать экземпляр Google Диска

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

Этот сервис Диска использует DriveRequestInitializer и его конструктор для инициализации необходимых параметров. Ниже приведены шаги по созданию экземпляра Диска с помощью его построителя:

Шаг 1

Нам нужна учетная запись Google, которая аутентифицируется через ваше приложение для Android. Вы можете получить последний подписанный аккаунт с помощью функции getLastSignedInAccount в GoogleSignIn. Взгляни:

GoogleSignIn.getLastSignedInAccount(this)?.let { googleAccount ->
}

Шаг 2

Теперь нам нужно создать GoogleAccountCredential для аутентификации зарегистрированной учетной записи с разрешением DRIVE_FILE для доступа к содержимому диска пользователя Google.

val credential = GoogleAccountCredential.usingOAuth2(
    this, listOf(DriveScopes.DRIVE_FILE)
)
credential.selectedAccount = googleAccount.account!!

Шаг 3

Наконец, нам нужно создать экземпляр службы Drive через его построитель, где нужно передать AndroidHttp, JacksonFactory и GoogleAccountCredential в качестве параметров. Взгляни:

val drive = Drive
        .Builder(
                AndroidHttp.newCompatibleTransport(), 
                JacksonFactory.getDefaultInstance(), 
                credential
        )
        .setApplicationName(getString(R.string.app_name))
        .build()

Когда мы соберем все шаги вместе, у нас будет функция, которая возвращает экземпляр Drive. Взгляни:

Доступ к содержимому на Google Диске

Нет, мы аутентифицировали экземпляр диска, давайте начнем с доступа к существующим файлам на пользовательском диске Google. Внутри класса диска у нас есть функция под названием files() - средство доступа для создания запросов из коллекции файлов.

В основном здесь мы можем использовать три параметра:

  1. spaces - Список пробелов, разделенных запятыми, для запроса в корпусе. Поддерживаемые значения: drive, appDataFolder и photos. Здесь мы используем drive.
  2. fields - Необходимая информация о каждом файле, такая как идентификатор, имя и т. д.
  3. q - Запрос для фильтрации результатов файла. См. Информацию о поддерживаемом синтаксисе в руководстве «Поиск файлов».

Ниже приведен фрагмент кода для доступа ко всем файлам на диске. Взгляни:

Чтобы кратко объяснить функцию, сначала мы получаем экземпляр класса Drive из getDriveService function. Затем запустил область сопрограммы для выполнения асинхронной операции для получения файлов на диске с помощью функции файлов. В журнале теперь вы можете видеть имена и идентификаторы файлов дисков.

Загрузите файл на Google диск

Пришло время загрузить ваш первый файл на Google Диск. Это включает в себя несколько шагов, посмотрите:

Шаг 1

Сначала создайте экземпляр файла, который вы хотите обновить, из локальной среды хранения. Взгляни:

val localFileDirectory = File(
                  getExternalFilesDir("backup")!!.toURI())
val actualFfile = File("${localFileDirectory}/$FILE_NAME_BACKUPP")

Шаг 2

Создайте файл на диске Google и задайте имя файла с фактическим именем файла. Взгляни:

val gfile = com.google.api.services.drive.model.File()
gfile.name = actualFfile.name

Шаг 3

Теперь нам нужно создать экземпляр FileContent с содержимым и mime-типом фактического файла. Взгляни:

val fileContent = FileContent("text/plain", actualFfile)

Шаг 4

Теперь загрузите gfile и fileContent в привод.

googleDriveService.Files().create(gfile,fileContent).execute()

Когда мы соберем все шаги вместе, у вас будет функция, которая будет загружать файлы на диск.

Скачать файл с гугл диска

Подобно функциям создания и доступа, сначала мы получим экземпляр диска из getDriveService функции, а затем воспользуемся функцией get для загрузки файла. Здесь нам нужно передать id файла, который вы хотите скачать. Взгляни:

Бонус

Чтобы узнать больше о расширенной разработке Android, прочтите следующие статьи:

Недавно я наткнулся на эту отличную статью, опубликованную Satya Pavan Kantamani о покупках в приложении в Android, очень рекомендую:



На этом пока все, надеюсь, вы узнали что-то полезное, спасибо за чтение.