Google 登录不适用于 Play 游戏服务启用,但无需启用

Posted

技术标签:

【中文标题】Google 登录不适用于 Play 游戏服务启用,但无需启用【英文标题】:Google SignIn does not work with Play Games Services enables, but works without 【发布时间】:2017-12-05 00:47:38 【问题描述】:

首先让我们看一下运行良好的代码。这就是我们设置 Google Api 客户端的方式:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail() 
                .requestIdToken(AppActivity.this.getResources().getString(R.string.server_client_id))
                .build();

GoogleSignIn.googleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();

然后这个用于连接:

// GPGS needs optional apparently, at least it crashes without. 
// Normal (non GPGS) SignIn works either way
googleApiClient.connect(SIGN_IN_MODE_OPTIONAL); 

然后我们调用登录。覆盖出现,我选择我的电子邮件,登录运行,一切都很好:

public static void loginGoogleSDK()

    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
    GameApplication.getActivity().startActivityForResult(signInIntent, RC_SIGN_IN);


现在有非常相似的 Google Play 游戏服务登录,但总是返回 User Cancelled 错误。出现 GPGS 覆盖,可以选择一封电子邮件,然后消失并返回错误:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestEmail()
            .requestIdToken(AppActivity.this.getResources().getString(R.string.server_client_id))
            .build();

GoogleSignIn.googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Games.API)
            .addScope(Games.SCOPE_GAMES)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

连接和登录是完全平等的。

用户取消结果代码,返回这里:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);

    // cancelled = true when using GPGS 
    GameLog.i("On Activity Result called, cancelled? " + (resultCode == RESULT_CANCELED) );


    // [Other code for handling login....]



有人知道是什么原因造成的,以及我们如何在 Google Player Games Services 正常工作的情况下登录?

【问题讨论】:

【参考方案1】:

我的代码是 100% 正确的。

我必须在我的游戏下的 Google Play 开发者控制台的“测试人员”下添加我的电子邮件。

这对于 Google+ 登录不是必需的,但对于游戏来说是必需的。

【讨论】:

【参考方案2】:

我遇到了类似的问题,但根据我的阅读,您不能将 Auth.GOOGLE_SIGN_IN_API 与 Games.API 一起使用。

【讨论】:

在这里查看本指南,有可能:developers.google.com/games/services/android/offline-access

以上是关于Google 登录不适用于 Play 游戏服务启用,但无需启用的主要内容,如果未能解决你的问题,请参考以下文章

上传到 Play 商店时,Google 登录不适用于应用

Google Play 游戏服务登录回调

带有 Google Play 游戏服务的 OAuth 令牌

Google Play 游戏服务 - 无法登录游戏中心

Google play 游戏服务再次显示来自 google+ 的登录屏幕

Google play 游戏服务登录失败