虽然我的应用程序处于alpha版和未发布状态,但只要用户登录Google Play游戏,我就会获得他们的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以及它引用的问题,似乎我现在获得的第二个版本是一个过时的版本,链接到用户的谷歌加帐户。据推测,新版本(带有前缀g)可以让玩家不需要使用谷歌加帐户来玩我的游戏。有关更换ID的Google公告,请参阅this帖子。这听起来像Unity插件返回新的id而本机的android库没有。
所以我的问题是,为什么在谷歌游戏服务(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
}
}
答案 0 :(得分:0)
您可以查看https://github.com/playgameservices/clientserverskeleton
中的示例要注意的一件事是,如果您只使用游戏配置和requestAuthCode(),则没有其他用户同意提示。
如果您要求其他项目和范围,GoogleSignIn API不会使用游戏ID。要使用游戏特定ID:
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
GoogleSignInAccount acct = result.getSignInAccount();
Log.d(TAG,"Legacy account = " + acct.getId());
Log.d(TAG,"Games Id:" + Games.Players.getCurrentPlayer
(mGoogleApiClient).getPlayerId());