GoogleApiClient:之后无法手动连接并执行signOut

我想手动处理GoogleApiClient上的connect()disconnect()操作。 我试图:

  • 建立一个新的GoogleApiClient (没有enableAutoManage
  • 调用connect()
  • onConnected()被调用时执行signOut
  • signOut结束之后调用disconnect()

这是一个例子:

 fun signOut(googleApiClient: GoogleApiClient, resultCallback: (Status) -> Unit) { Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(resultCallback) } fun test() { val googleApiClient = GoogleApiClient.Builder(activity) .addApi(Auth.GOOGLE_SIGN_IN_API, buildGoogleSignInOptions(googleAuthId)) .build() googleApiClient.registerConnectionCallbacks(object : ConnectionCallbacks { override fun onConnected(connectionHint: Bundle?) { signOut { status -> //TODO something with status googleApiClient.disconnect() } } override fun onConnectionSuspended(cause: Int) { //nop } }) googleApiClient.registerConnectionFailedListener { //TODO handle failure } googleApiClient.connect() } 

但是,当调用onConnected()时, signOut调用将失败

 IllegalStateException: GoogleApiClient is not connected yet 

我做错了什么,或者是从图书馆的错误?

我们需要在onCreate()中创建googleAPIClient并在同一活动中注销它。

例如:在onCreate()

  GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(this.getString(R.string.default_web_client_id)) .requestEmail() .requestProfile() .build(); mGoogleApiClient = new GoogleApiClient.Builder(activity) .enableAutoManage(activity, new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } }) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(@Nullable Bundle bundle) { } @Override public void onConnectionSuspended(int i) { } }) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); 

并注销它:

  Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { if (mListener != null) { mListener.onSigout(""); } } }); 

如果我们使用ApplicationContext创建mGoogleAPIClient,则不能正确注销Google帐户。