2016-08-19 1 views
1

Я программирую функцию внутри своего приложения, которая синхронизирует все избранные пользователи на Google Диске. Весь смысл этой функции заключается в том, что все устройства этого пользователя синхронизированы.Синхронизация файлов с Google Диском AppFolder с несколькими клиентами

Есть нечто, что хорошо знать:

  • Это приложение тянет все фаворитов от Google Drive при запуске, сравнивает их с местными деликатесами. Если в папке Google Диска есть избранное, которого нет в локальном хранилище, этот фаворит добавляется в локальное хранилище и наоборот.
  • Приложение использует API Google Диска.

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

Я думаю о способе сделать какой-то «журнал изменений», чтобы увидеть, что фаворит удаляется или добавляется, в котором содержится время, когда оно было добавлено/удалено, и somekind идентификатора устройства. (Я сейчас вслушиваюсь). Проблема в том, что файл изменений часто становится довольно большим при использовании приложения (каждое избранное и удаление записывается)

Проблема, с которой я столкнулась, - это не код , но способ синхронизации должен работать и проверять избранные. Я пробовал отправлять фаворитов на Google Диск, но это занимает много места (и не может быть легко отлажено).

Пожалуйста, подумайте вслух (в комментариях хаха), я не уверен, как бы я справился с этой задачей, и мне нужно, чтобы кто-то указал в правильном направлении.

Любые решения приветствуются.

ответ

1

Change Subscriptions

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

Следующий пример кода показывает логику можно реализовать, чтобы добавить подписку изменения в файл:

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, 
mSelectedFileId); 
file.addChangeSubscription(mGoogleApiClient); 

изменение Handle подписка событие

Для обработки изменений подписки событий необходимо создать класс который расширяет DriveEventService и отменяет метод onChange. В этом случае будет выполняться специальная обработка ChangeEvent.

public class MyDriveEventService extends DriveEventService { 

@Override 
public void onChange(ChangeEvent event) { 
Log.d(TAG, event.toString()); 
// Application-specific handling of event. 
} 

} 

Добавьте это в свой AndroidManifest.XML-файл

<application ...> 
    ... 
    <service android:name=".MyDriveEventService" android:exported="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.drive.events.HANDLE_EVENT"/> 
     </intent-filter> 
    </service> 
</application> 

Ваше приложение получит ChangeEvent всякий раз, когда файл или папка обновляется другим приложением на устройстве или загрузки Drive API изменений с сервера.

Вы также можете попробовать использовать Push Notifications (Drive Rest API):

Привод API обеспечивает уведомления толчка, которые позволяют следить за изменениями в ресурсах. Вы можете использовать эту функцию для повышения производительности вашего приложения. Это позволяет вам исключить дополнительную сеть и вычислить затраты, связанные с ресурсами опроса, чтобы определить, были ли они изменены. Всякий раз, когда наблюдаемый ресурс изменяется, Drive API уведомляет ваше приложение.

Для получения дополнительной информации вы можете прочитать блог для push notification.

Надеюсь, это поможет!

+0

Это реализация, которую я хотел использовать! Спасибо, но есть ли у вас идея идти в ногу со всеми изменениями? – tim687