Подтвердить что ты не робот

"GoogleApiClient еще не подключен" при выходе из системы при использовании Firebase auth с подписью google

Я использую Firebase auth с помощью входа в Google, но я хочу выписать из другого действия, но когда я выхожу из системы, используя этот метод, который отлично работает от одной и той же активности, но не с другим действием. Вот метод.

public void logOut() {
        mAuth.signOut();
        // Google sign out
        Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
                new ResultCallback<Status>() {
                    @Override
                    public void onResult(@NonNull Status status) {
                        authorizeUser(null);
                    }
                });
    }

Но при создании этого статического метода и статики googleApiClient он все еще не работает, и когда я выполняю только

FirebaseAuth.getInstance().signOut();

ошибка, которую я получаю, - это (logcat)

E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.igov, PID: 21316
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
      at com.google.android.gms.internal.zzoe.zzd(Unknown Source)
      at com.google.android.gms.internal.zzoh.zzd(Unknown Source)
      at com.google.android.gms.internal.zzof.zzd(Unknown Source)
      at com.google.android.gms.auth.api.signin.internal.zzc.signOut(Unknown Source)
      at com.igov.design.LoginActivity.logOut(LoginActivity.java:159)
      at com.igov.design.LoginActivity$2.onClick(LoginActivity.java:62)
      at android.view.View.performClick(View.java:5198)
      at com.igov.design.MainActivity.onNavigationItemSelected(MainActivity.java:101)
      at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:152)
      at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810)
      at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
      at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957)
      at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:318)
      at android.view.View.performClick(View.java:5198)
      at android.view.View$PerformClick.run(View.java:21147)
      at android.os.Handler.handleCallback(Handler.java:739)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:148)
      at android.app.ActivityThread.main(ActivityThread.java:5417)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
4b9b3361

Ответ 1

Зарегистрировать обратный вызов соединения с клиентом Api для клиентов

Используемые классы:

  • Класс LoginActivity (активность для входа)
  • LogoutActivity class (Activity to Logout)

Код:

    public void logout() {
       mGoogleApiClient.connect();
       mGoogleApiClient.registerConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
        @Override
        public void onConnected(@Nullable Bundle bundle) {

            FirebaseAuth.getInstance().signOut();
            if(mGoogleApiClient.isConnected()) {
                Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(@NonNull Status status) {
                        if (status.isSuccess()) {
                            Log.d(TAG, "User Logged out");
                            Intent intent = new Intent(LogoutActivity.this, LoginActivity.class);
                            startActivity(intent);
                            finish();
                        }
                    }
                });
            }
        }

        @Override
        public void onConnectionSuspended(int i) {
            Log.d(TAG, "Google API Client Connection Suspended");
        }
    });
}

Ответ 2

Если вы используете логин с помощью google и выходите из другой активности и сталкиваетесь с этой ошибкой, особенно при выходе из системы, проверьте эту строку, если вы нашли ее в своем коде, а затем удалите ее.

                                mGoogleApiClient = GoogleApiClient.Builder(this)
/*this line should be removed*/.enableAutoManage(this , this)
                               .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                               .build()