Google Play Saved Games 中 resolveConflict 的 snapshotId

snapshotId for resolveConflict in Google Play Saved Games

如何在 Gogle Play 保存的游戏中获取快照 ID(我使用的是 Android 的 Google Play 服务库的最新版本 27)?

com.google.android.gms.games.snapshot.Snapshots中有一个方法:

public abstract PendingResult<Snapshots.OpenSnapshotResult> resolveConflict (GoogleApiClient apiClient, String conflictId, String snapshotId, SnapshotMetadataChange metadataChange, SnapshotContents snapshotContents)

我在 Snapshot/SnapshotMetadata/OpenSnapshotResult 接口中找不到像 getID()getSnapshotID() 这样的方法。

文档: https://developers.google.com/android/reference/com/google/android/gms/games/snapshot/Snapshots

没有直接的方法可以找到快照的snapshot_id,但您可以这样获取:

  • 确定 Player_id(如果其当前经过身份验证的用户,则设置为 me)并发出 GET 请求以检索由创建的快照列表您申请的播放器ID对应的播放器

    GET https://www.googleapis.com/games/v1/players/playerId/snapshots
    
  • 这将 return 项目数组中的 快照资源

  • items 数组将包含以下 JSON 数据:

    { "kind": "games#snapshot", "id": 字符串, "driveId": 字符串, "uniqueName": 字符串, "type": 字符串, "title": 字符串, "description": 字符串, "coverImage":{ "kind": "games#snapshotImage", "width":整数, "height":整数, "mime_type": 字符串, "url": 字符串 }, "lastModifiedMillis": 长, "durationMillis":长 }

  • 与此键关联的 "id" 值将是 snapshot_id你要找的。

获取用于解决冲突的快照 ID 实际上非常简单。只需在您的快照上调用 snapshot.getMetadata().getSnapshotId() 即可。

您的解决代码可能如下所示:

Snapshots.OpenSnapshotResult openSnapshotResult; //Conflicting open result

final SnapshotContents resContent = openSnapshotResult.getResolutionSnapshotContents();
//Make resolution of conflicting snapshot contents
resContent.writeBytes(...);

final Snapshot snapshot = openSnapshotResult.getSnapshot();
final String snapshotID = snapshot.getMetadata().getSnapshotId(); //Here comes your snapshot ID
Games.Snapshots.resolveConflict(PlayClient, openSnapshotResult.getConflictId(), snapshotID, SnapshotMetadataChange.EMPTY_CHANGE, resContent);

不管你拿的是基础快照的Id还是冲突快照的Id都没有关系。他们是一样的。