Как выйти из учетной записи Google с помощью пункта меню в моем приложении для Android - PullRequest
0 голосов
/ 25 апреля 2018

В моем приложении я работаю с учетной записью Google, здесь мое требование - я хочу выйти из приложения, используя пункт меню (выход).

Вот мой логин Код активности:

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

            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .enableAutoManage(this, this)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();    
            // Customizing G+ button
            btnSignIn.setSize(SignInButton.SIZE_STANDARD);
            btnSignIn.setScopes(gso.getScopeArray());    
        }

        private void signIn() {
            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }

        public void signOut() {
            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                    new ResultCallback<Status>() {
                        @Override
                        public void onResult(Status status) {
                            updateUI(false);
                        }
                    });
        }

        private void handleSignInResult(GoogleSignInResult result) {
            Log.d(TAG, "handleSignInResult:" + result.isSuccess());
            if (result.isSuccess()) {
                // Signed in successfully, show authenticated UI.
                GoogleSignInAccount acct = result.getSignInAccount();

                Log.e(TAG, "display name: " + acct.getDisplayName());

                personName = acct.getDisplayName();

                 email = acct.getEmail();

                Log.e(TAG, "Name: " + personName + ", email: " + email);
                try {
                    personPhotoUrl = acct.getPhotoUrl().toString();
                    Glide.with(getApplicationContext()).load(personPhotoUrl)
                            .thumbnail(0.5f)
                            .crossFade()
                            .diskCacheStrategy(DiskCacheStrategy.ALL)
                            .into(imgProfilePic);

                } catch (Exception e) {
                    imgProfilePic.setImageResource(R.mipmap.user1);
                }

                updateUI(true);
            } else {
                // Signed out, show unauthenticated UI.
                updateUI(false);
            }
        }   
        @Override
        public void onClick(View view) {    
            switch (view.getId()) {
                case R.id.btn_sign_in:
                    signIn();
                    break;
            }
        }    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);    
            // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
            if (requestCode == RC_SIGN_IN) {
                GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
                handleSignInResult(result);
            }
        }

        @Override
        public void onStart() {
            super.onStart();

            OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
            if (opr.isDone()) {     
                Log.d(TAG, "Got cached sign-in");
                GoogleSignInResult result = opr.get();
                handleSignInResult(result);
            } else {
                the sign-in has expired,
                silently.  Cross-device
                showProgressDialog();
                opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                    @Override
                    public void onResult(GoogleSignInResult googleSignInResult) {
                        hideProgressDialog();
                        handleSignInResult(googleSignInResult);
                    }
                });
            }
        }    
        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {    
            Log.d(TAG, "onConnectionFailed:" + connectionResult);
} 
        private void showProgressDialog() {
            if (mProgressDialog == null) {
                mProgressDialog = new ProgressDialog(this);
                mProgressDialog.setIndeterminate(true);
            }    
            mProgressDialog.show();
        }   
        private void hideProgressDialog() {
            if (mProgressDialog != null && mProgressDialog.isShowing()) {
                mProgressDialog.hide();
            }
        }    
        private void updateUI(boolean isSignedIn) {  
            if (isSignedIn) {    
                Intent intent = new Intent(LoginActivity.this, OtpVerfication.class);
                intent.putExtra("username",personName);
                intent.putExtra("email",email);
                intent.putExtra("picture",personPhotoUrl);
                startActivity(intent);
                overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left);
                finish();
        } 

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

Я искал это и нашел некоторые решения, но никто не помогмне решить эту проблему.

1 Ответ

0 голосов
/ 25 апреля 2018

На самом деле есть опции для logOut / SignOut. AS Docs заявляет, что вы можете выйти из системы с помощью метода signOut() на googleSignInClient

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

здесь, в onComplete(), вы можете проверить, был ли это сбой или успех, а также проверить, какой это был аккаунт.

еще больше, если вы хотите удалить свое приложение из его учетной записи (технически удаляя доступ ваших приложений к учетной записи пользователя), вы можете сделать это, используя метод revokeAccess():

mGoogleSignInClient.revokeAccess()
        .addOnCompleteListener(this, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Поскольку revokeAccess() настоятельно рекомендуется, я предлагаю вам предоставить опцию для пользователя для этого метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...