Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logout for GoogleApiClient in Android application

Using such code it is possible to link my app and use account.

if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(Plus.API)
                    .addApi(Drive.API)
                    .addScope(Drive.SCOPE_FILE)
                    .addScope(Drive.SCOPE_APPFOLDER)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();
        }
        mGoogleApiClient.connect();

But is where any way to 'logout' from this account once activated or switch to a new one?

like image 764
Vyacheslav Avatar asked Nov 29 '22 14:11

Vyacheslav


2 Answers

clearDefaultAccount() doesn't work. For sign out and clear selected account use Auth.GoogleSignInApi.signOut() like this:

private GoogleApiClient mGoogleApiClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Build a GoogleApiClient with access to the Google Sign-In API and the
    // options specified by gso.
    mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) //Use app context to prevent leaks using activity
            //.enableAutoManage(this /* FragmentActivity */, connectionFailedListener)
            .addApi(Auth.GOOGLE_SIGN_IN_API)
            .build();
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

private void signOut() {
    if (mGoogleApiClient.isConnected()) {
        Auth.GoogleSignInApi.signOut(mGoogleApiClient);
        mGoogleApiClient.disconnect();
        mGoogleApiClient.connect();
    }
}
like image 138
Gonzalo Avatar answered Dec 04 '22 15:12

Gonzalo


I found this up-to-date solution:

if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
                        mGoogleApiClient.clearDefaultAccountAndReconnect().setResultCallback(new ResultCallback<Status>() {

                            @Override
                            public void onResult(Status status) {

                                mGoogleApiClient.disconnect();
                            }
                        });

                    }  

The usage of

Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);

is deprecated

https://developers.google.com/android/reference/com/google/android/gms/plus/Account

like image 38
Vyacheslav Avatar answered Dec 04 '22 14:12

Vyacheslav