【发布时间】:2017-04-07 05:50:17
【问题描述】:
虽然我的应用程序处于 Alpha 版且未发布,但只要用户登录 google 玩游戏,我就会得到他们的 id Games.Players.getCurrentPlayer(mGoogleApiClient).getPlayerId(),它会返回这种格式的 id
g07610263060548408114
现在我处于公开测试阶段,但是使用相同的调用会给我一个这种格式的 id
117053902313732480537
(我并不是说从 alpha 到 beta 的进展或我发布的内容导致了这种情况,但这是我开始注意到变化的时候。)
通过阅读 github 上的 unity 插件项目中的一些问题, Native Android Google+ User ID different than using Unity Plugin #1277 及其引用的问题,似乎我现在获得的第二个版本的 id 是一个过时的版本,它与用户的 google plus 帐户相关联。据说新版本(带有前缀 g)是可用的,因此玩家无需拥有 google plus 帐户即可玩我的游戏。请参阅this 发布关于更换 id 的 google 公告。听起来统一插件返回新的 id 而原生的 android 库没有。
所以我的问题是,为什么在最新版本的 google play 游戏服务 (10.2.1) 中,我为用户获取的 id 是旧版 id?我怎样才能获得新版本 - 与比赛中的参与者 ID 相同的版本?
我尝试过使用谷歌的新登录 api,但这也给了我旧版 ID。即使对于我之前获得新 id 格式的用户也是如此。
我可以在任何地方使用这个遗留 ID,它至少是一致的,但是我得到的唯一 ID turnBasedMatch.getParticipants.get(0).getPlayerId() 是新的id,所以我永远无法映射两者。我想使用新的 id,但我无法再为新用户获取它。
我的活动目前扩展了 BaseGameActivity 这是我在尝试新登录之前用来初始化客户端的一些代码
mPresenter = GameSetupPresenter.getInstance(getApiClient());
getApiClient().registerConnectionCallbacks(mPresenter);
getApiClient().registerConnectionFailedListener(mPresenter);
@Override
public void onSignInSucceeded() {
Games.Players.getCurrentPlayer(mPresenter.getGoogleApiClient()).getPlayerId();
}
我获取 playerId 的这一行返回旧格式或新格式的 id。
使用新的登录过程,我的代码如下所示:
GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestId()
.requestIdToken(getString(R.string.server_client_id))
.requestProfile()
.requestScopes(new Scope(Scopes.GAMES), new Scope(Scopes.PROFILE), new Scope(Scopes.PLUS_ME))
.requestServerAuthCode(getString(R.string.server_client_id), false)
.build();
mPresenter = GameSetupPresenter.getInstance(null);
GoogleApiClient client = new GoogleApiClient.Builder(this)
.enableAutoManage(this, mPresenter)
.addApi(Auth.GOOGLE_SIGN_IN_API, options)
.addApi(Games.API)
.build();
mPresenter.bindGoogleApiClient(client);
client.registerConnectionCallbacks(mPresenter);
client.registerConnectionFailedListener(mPresenter);
Intent intent = Auth.GoogleSignInApi.getSignInIntent(client);
startActivityForResult(intent, RC_SIGN_IN);
@Override
protected void onActivityResult(int request, int response, Intent data) {
super.onActivityResult(request, response, data);
if (request == RC_SIGN_IN) {
if(response == RESULT_OK) {
Games.Players.getCurrentPlayer(mPresenter.getGoogleApiClient()).getPlayerId();//returns different id's based on whether user was created before or after game was published.
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
result.getSignInAccount().getId();//returns legacy id
}
}
【问题讨论】: