Android上的Google SignIn - 自登录后无法注销

时间:2016-08-28 21:24:23

标签: java android authentication google-signin

我已通过本指南(https://developers.google.com/identity/sign-in/android/start-integrating)集成了Google SignIn。

我已经完成了这样的设置:

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)
            .addOnConnectionFailedListener(this)
            .addConnectionCallbacks(this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

使用以下代码登录并完美运行:

public static void loginGoogleSDK()
{
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
    GameApplication.getActivity().startActivityForResult(signInIntent, RC_SIGN_IN);
}

出现SignIn-Overlay,我选择一个帐户并登录。一切正常。

然后我尝试在本指南(https://developers.google.com/identity/sign-in/android/disconnect)之后使用以下代码调用logout,但我始终显示错误消息:无法注销,因为未登录

Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
        new ResultCallback<Status>() {
            @Override
            public void onResult(Status status) {
                System.out.println("Google SDK Sign Out Access Status:" + status);
            }
        });

奇怪的是,如果我再次呼叫登录,它会自动成功,我无法再次选择帐户。因此,登录仍然有效,我无法注销。

1 个答案:

答案 0 :(得分:1)

根据enableAutoManage documentation,包括它:

  

在支持库FragmentActivity中启用自动生命周期管理,该片段连接onStart()中的客户端并在onStop()中断开连接。

     

它会相应地处理用户可恢复的错误,如果onConnectionFailed(ConnectionResult)没有解决方案,则会在unresolvedConnectionFailedListener上调用ConnectionResult。这消除了与使用GoogleApiClient相关联的大部分锅炉板。

如果不像Add Sign In guide那样包含enableAutoManage(),那么GoogleApiClient永远不会实际连接,从而导致您遇到的错误。

如果您不想使用enableAutoManage(),则可以按照manually manage connections的说明操作,包括提供ConnectionCallbacksOnConnectionFailedListener的实施。