GoogleSIgnInClient автоматически регистрируется после выхода - PullRequest
0 голосов
/ 09 апреля 2020

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

package com.example.googlesignintest

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.SignInButton
import com.google.android.gms.common.api.ApiException
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.GoogleAuthProvider
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    private lateinit var signInButton: SignInButton
    private lateinit var signInClient: GoogleSignInClient
    private val fAuth = FirebaseAuth.getInstance()
    private val RC_SIGN_IN = 1

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        signInButton = findViewById(R.id.google_sign_in)

        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build()

        signInClient = GoogleSignIn.getClient(this, gso)

        signInButton.setOnClickListener {
            signIn()
        }

        sign_out_app.setOnClickListener {
            signInClient.signOut()
            sign_out_app.visibility = View.GONE
            Toast.makeText(applicationContext, "Signed Out!!!", Toast.LENGTH_LONG).show()
        }

    }

    private fun signIn() {
        val signInIntent = signInClient.signInIntent
        startActivityForResult(signInIntent, RC_SIGN_IN)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == RC_SIGN_IN){
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            handleSignInResult(task)
        }

    }

    private fun handleSignInResult(comptask: Task<GoogleSignInAccount>?) {
        try{
            val acc = comptask!!.getResult(ApiException::class.java)
            Toast.makeText(applicationContext, "Signed In Successfully", Toast.LENGTH_LONG).show()
            firebaseGoogleAuth(acc)
        }catch (e: ApiException){
            e.printStackTrace()
            Log.d("ex", e.message.toString().trim())
            Toast.makeText(applicationContext, "Signed In Failed", Toast.LENGTH_LONG).show()
            firebaseGoogleAuth(null)
        }
    }

    private fun firebaseGoogleAuth(acct: GoogleSignInAccount?) {
        val authCredential = GoogleAuthProvider.getCredential(acct!!.idToken, null)
        fAuth.signInWithCredential(authCredential).addOnCompleteListener {
            if(it.isSuccessful){
                Toast.makeText(applicationContext, "Successful", Toast.LENGTH_LONG).show()
                val firebaseUser = fAuth.currentUser
                updateUI(firebaseUser)
            }
            else{
                Toast.makeText(applicationContext, "Failed", Toast.LENGTH_LONG).show()
                updateUI(null)
            }
        }
    }

    private fun updateUI(firebaseUser: FirebaseUser?) {
        val googleSignInAccount = GoogleSignIn.getLastSignedInAccount(applicationContext)
        if (googleSignInAccount != null){
            val personName = googleSignInAccount.displayName.toString()
            val personGivenName = googleSignInAccount.givenName.toString()
            val personFamilyName = googleSignInAccount.familyName.toString()
            val personEmail = googleSignInAccount.email.toString()
            val personId = googleSignInAccount.id.toString()
            val personImage = googleSignInAccount.photoUrl

            startActivity(Intent(this, Main2Activity::class.java))
            Toast.makeText(applicationContext, "Person Name :$personName/nPerson Email ID: $personEmail", Toast.LENGTH_LONG).show()
        }
    }

    override fun onStart() {
        super.onStart()

        if (fAuth.currentUser != null){
            startActivity(Intent(this, Main2Activity::class.java))
            finish()
        }
    }
}

Пожалуйста, помогите мне !!!! Я хочу выполнить вход из другой учетной записи, когда нажимаю кнопку GoogleSignIn. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Пожалуйста, попробуйте это:

 sign_out_app.setOnClickListener {
            signInClient.signOut()
            fAuth.signOut()//add this line     
            sign_out_app.visibility = View.GONE
            Toast.makeText(applicationContext, "Signed Out!!!", Toast.LENGTH_LONG).show()
 }
0 голосов
/ 09 апреля 2020

Это может быть полезно !!!

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 2) {
                GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
                if (result.isSuccess()) {
                    GoogleSignInAccount acct = result.getSignInAccount();
                    if(acct!=null) {            
                        //Take all data You Want
                        String identifier = acct.getId()+"";                 
                        String displayName = acct.getDisplayName()+"";
                        //After You got your data add this to clear the priviously selected mail
                        mGoogleApiClient.clearDefaultAccountAndReconnect();
                    }
                }else Log.e("handleSignInResult","Failed ; "+result.getStatus());
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...