Я работаю над обновлением для существующей игры, где я хочу перенести все, что связано с Google Drive, на остальные API.Я хочу добиться той же функциональности, что и в играх Google Play c ++ SDK v2.0 (сохранение состояния игры на диске Google - снимок) для поддержки обратной совместимости.Загрузка старых сохраненных игр уже работает на новом клиенте, но не совсем наоборот.
Если файл (снимок) впервые создается на новом клиенте, старый клиент не распознает его.Когда я пытаюсь загрузить файл на старом клиенте, он возвращает пустой файл и в том же действии он также загружает этот пустой файл на диск (теперь в appDataFolder есть два файла с одинаковым именем).Если новый клиент на следующем шаге перезаписывает этот новый пустой файл, старый клиент успешно его скачает.
Короткая версия: обновление существующих файлов работает, создание новых файлов на новом клиенте не удается загрузить в старом.
Я пытался сопоставлять новые файлы настолько близко, насколько мне удается (папка play_games является родительской, тип mime установлен на моментальный снимок, описание то же самое, модель устройства в свойствах), но мне все еще не хватает последней части головоломки.
Сначала я проверяю, существует ли папка play_games, и создаю ее при необходимости:
File meta = new File().setParents(Collections.singletonList("appDataFolder"))
.setMimeType("application/vnd.google-apps.folder")
.setName("play_games");
m_playGamesFolder = m_driveService.files()
.create(meta)
.execute();
Новые файлы создаются следующим образом:
FileContent mediaContent = new FileContent("application/vnd.google-play-games.snapshot-initial", localContent);
Map<String, String> props = new HashMap<>();
props.put("deviceName", android.os.Build.MODEL);
File meta = new File()
.setParents(Collections.singletonList(m_playGamesFolder.getId()))
.setMimeType("application/vnd.google-play-games.snapshot-initial")
.setName(fileName)
.setDescription(m_description)
.setProperties(props);
m_driveService.files().create(meta, mediaContent).execute();
Обновление выполняется аналогичным образом:
FileContent mediaContent = new FileContent("application/vnd.google-play-games.snapshot", localContent);
Map<String, String> props = new HashMap<>();
props.put("deviceName", android.os.Build.MODEL);
File meta = new File()
.setName(fileName)
.setDescription(m_description)
.setProperties(props);
return m_driveService.files().update(cloudFile.getId(), meta, mediaContent).execute();
Кто-нибудь знает, что мне здесь не хватает?