Сервисы Google Play Games: написание сохраненных игр - PullRequest
0 голосов
/ 23 ноября 2018

Из-за недавних изменений в API Сервиса игр Google Play я вынужден заменить весь устаревший код в моем приложении для Android.Я следую руководству Google в https://developers.google.com/games/services/android/savedgames, и мне не ясно, как передать снимок этой функции, которая записывает данные для сохранения.

private Task writeSnapshot(Snapshot snapshot, byte[] data, Bitmap coverImage, String desc) {
    // Set the data payload for the snapshot
      snapshot.getSnapshotContents().writeBytes(data);
      // Create the change operation
      SnapshotMetadataChange metadataChange = new SnapshotMetadataChange.Builder()
          .setCoverImage(coverImage)
          .setDescription(desc)
          .build();
      SnapshotsClient snapshotsClient =
          Games.getSnapshotsClient(this, GoogleSignIn.getLastSignedInAccount(this));
      // Commit the operation
      return snapshotsClient.commitAndClose(snapshot, metadataChange);
}

Можете ли вы мне помочь?Я думаю, что пример использования этой функции должен быть добавлен в документацию, чтобы прояснить все и помочь разработчикам, которым необходимо изучить это с нуля.

1 Ответ

0 голосов
/ 28 ноября 2018

Хорошо, я понял, как это сделать.По сути, когда вы открываете клиент моментального снимка, вы должны использовать continueWith и получить моментальный снимок из задачи.

Учитывая, что у вас есть правильное изображение обложки и описание, а также учетная запись Google, в которой вы выполнили вход

mAccount = GoogleSignIn.getLastSignedInAccount(activity);

это код:

SnapshotsClient snapshotsClient = Games.getSnapshotsClient(activity, mAccount);
int conflictResolutionPolicy = SnapshotsClient.RESOLUTION_POLICY_MOST_RECENTLY_MODIFIED;
snapshotsClient.open(getSaveFileName(), true, conflictResolutionPolicy)
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, "Error", e);
        }
    }).continueWith(new Continuation<SnapshotsClient.DataOrConflict<Snapshot>, byte[]>() {
        @Override
        public byte[] then(@NonNull Task<SnapshotsClient.DataOrConflict<Snapshot>> task) 
                throws Exception {
            Snapshot snapshot = task.getResult().getData();
            snapshot.getSnapshotContents().writeBytes(getSaveGameData());
            SnapshotMetadataChange metadataChange = new SnapshotMetadataChange.Builder()
                .setCoverImage(coverImage)
                .setDescription(desc) 
                .build();
            SnapshotsClient snapshotsClient = Games.getSnapshotsClient(activity, mAccount);
            snapshotsClient.commitAndClose(snapshot, metadataChange);
            return null;
        }
    });
...