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

  • 建立一个新的GoogleApiClient(不带enableAutoManage)
  • 调用connect()
  • 调用onConnected()时的
  • 执行signOut
  • disconnect()结束后
  • 调用signOut
    这是一个例子:
    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并在同一 Activity 中将其注销。

    例如:
    在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帐户。

  • 10-08 06:23
    查看更多