我已通过本指南(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);
}
});
奇怪的是,如果我再次呼叫登录,它会自动成功,我无法再次选择帐户。因此,登录仍然有效,我无法注销。
答案 0 :(得分:1)
根据enableAutoManage documentation,包括它:
在支持库FragmentActivity中启用自动生命周期管理,该片段连接
onStart()
中的客户端并在onStop()
中断开连接。它会相应地处理用户可恢复的错误,如果
onConnectionFailed(ConnectionResult)
没有解决方案,则会在unresolvedConnectionFailedListener
上调用ConnectionResult
。这消除了与使用GoogleApiClient
相关联的大部分锅炉板。
如果不像Add Sign In guide那样包含enableAutoManage()
,那么GoogleApiClient
永远不会实际连接,从而导致您遇到的错误。
如果您不想使用enableAutoManage()
,则可以按照manually manage connections的说明操作,包括提供ConnectionCallbacks
和OnConnectionFailedListener
的实施。