Как войти и выйти из Google в рамках одного действия - PullRequest
0 голосов
/ 10 февраля 2019

Я новичок в программировании на Java и Android.Я пытаюсь создать систему входа в систему с помощью Google в моем приложении.То, что я хочу сделать, это переключить кнопку входа и выхода в деятельности.Однако после успешного входа в систему я никогда не смогу выйти из Google.Даже если я удалил приложение, я не смог бы выйти.

Вот мой код.

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

    mSignInButton = findViewById(R.id.sign_in_button);
    mSignInButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            signIn();
        }
    });

    mSignOutButton = findViewById(R.id.sign_out_button);
    mSignOutButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            signOut();
        }
    });


@Override
protected void onStart() {
    // Check for existing Google Sign In account, if the user is already signed in
    // the GoogleSignInAccount will be non-null.
    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
    updateUI(account);
    super.onStart();
}


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}


private void signIn() {
    Intent intent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(intent, RC_SIGN_IN);
}


private void signOut() {
    mGoogleSignInClient.signOut();
}


private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);
        String idToken = account.getIdToken();

        // Send the token to the API endpoint and validate


        // Signed in successfully, show authenticated UI.
        updateUI(account);
    } catch (ApiException e) {
        // The ApiException status code indicates the detailed failure reason.
        // Please refer to the GoogleSignInStatusCodes class reference for more information.
        updateUI(null);
    }
}


private void updateUI(GoogleSignInAccount signInAccount) {
    if (signInAccount != null) {
        mSignInButton.setVisibility(View.GONE);
        mSignOutButton.setVisibility(View.VISIBLE);
    } else {
        mSignInButton.setVisibility(View.VISIBLE);
        mSignOutButton.setVisibility(View.GONE);
    }
}

Как правильно выйти и обновить пользовательский интерфейс в рамках одного действия?

1 Ответ

0 голосов
/ 10 февраля 2019

попробуйте обновить код на основе документов о том, как выйти и отключиться.это будет ждать, пока пользователь не выйдет с сервера и не обновит пользовательский интерфейс приложения.

private void signOut() {
    mGoogleSignInClient.signOut()
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    updateUI(null);
                }
            });
}
...