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帐户。