Внедрение снимков гугл-игр для сохранения игр с помощью API Drive Rest API на Android - PullRequest
0 голосов
/ 11 февраля 2019

Я работаю над обновлением для существующей игры, где я хочу перенести все, что связано с 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();

Кто-нибудь знает, что мне здесь не хватает?

...