Android 如何自动登录到Google OAuth以访问已知用户帐户

Android 如何自动登录到Google OAuth以访问已知用户帐户,android,oauth,google-oauth,google-login,Android,Oauth,Google Oauth,Google Login,我正在我的应用程序中使用google firebase oAuth进行登录 我的问题是,每次我打开应用程序,它都会要求登录。 我想自动使用令牌服务,但我不知道如何和怎么做 private static int RC_SIGN_IN = 0 ; private static String TAG = "LOGIN_ACTIVITY"; private GoogleApiClient mGoogleApiClient; private FirebaseAuth mAuth; Context cont

我正在我的应用程序中使用google firebase oAuth进行登录 我的问题是,每次我打开应用程序,它都会要求登录。 我想自动使用令牌服务,但我不知道如何和怎么做

private static int RC_SIGN_IN = 0 ;
private static String TAG = "LOGIN_ACTIVITY";
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth mAuth;
Context context = LoginActivity.this;
public FirebaseAuth.AuthStateListener mAuthListener;
private EditText mEmailField,mPasswordField;
TextView register;
private String Email ;
Model_userDetails model_userDetails = new Model_userDetails(); ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getSupportActionBar().hide();
    register = (TextView) findViewById(R.id.register);

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user!=null) {

               // new HttpCall().checkGoogleEmail(context, Email);

            }

            else
                Log.d("AUTH","User logged out");
        }
    };


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

    mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_SIGN_IN_API,gso).build();

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    findViewById(R.id.email_sign_in_button).setOnClickListener(this);
    mEmailField = (EditText) findViewById(R.id.email);
    mPasswordField = (EditText) findViewById(R.id.password);
    register.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(LoginActivity.this,NewUserActivity.class));
        }
    });


}

@Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
protected void onStop() {
    super.onStop();
    if (mAuthListener !=null)
        mAuth.removeAuthStateListener(mAuthListener);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==RC_SIGN_IN)
    {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);

        if (result.isSuccess())
        {
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);
            Email = mAuth.getCurrentUser().getEmail();
            new HttpCall().checkGoogleEmail(context, Email);
        }
        else
            Log.d(TAG,"Google login failed ");

    }
}



private void firebaseAuthWithGoogle(GoogleSignInAccount acct){
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(),null);
    mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            Log.d("AUTH","sign in with credentials: complete "+ task.isSuccessful());
        }
    });
}



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

  private void emailSignIn()

{
    String email = mEmailField.getText().toString();
    String password = mPasswordField.getText().toString();
    if (TextUtils.isEmpty(email)||  TextUtils.isEmpty(password))
    {
        Toast.makeText(LoginActivity.this,"Fields are empty ",Toast.LENGTH_SHORT).show();
    }
    else
    {

        final ProgressDialog progressDialog = ProgressDialog.show(LoginActivity.this, "Please wait...", "Proccessing...", true);

        (mAuth.signInWithEmailAndPassword(email,password))
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        progressDialog.dismiss();

                        if (task.isSuccessful()) {
                            Toast.makeText(LoginActivity.this, "Login successful", Toast.LENGTH_LONG).show();
                            Intent i = new Intent(LoginActivity.this, AccountActivity.class);
                            i.putExtra("Email", mAuth.getCurrentUser().getEmail());
                            startActivity(i);
                        } else {
                            Log.e("ERROR", task.getException().toString());
                            Toast.makeText(LoginActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();

                        }
                    }
                });}

}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Log.d(TAG," Connection Failed");

}
private static int RC\u SIGN\u IN=0;
私有静态字符串TAG=“LOGIN\u ACTIVITY”;
私人GoogleapClient MGoogleapClient;
私人消防队;
Context=LoginActivity.this;
公共FirebaseAuth.AuthStateListener mAuthListener;
私有EditText mEmailField、mPasswordField;
文本视图寄存器;
私人字符串电子邮件;
Model_userDetails Model_userDetails=新模型_userDetails();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
getSupportActionBar().hide();
寄存器=(TextView)findViewById(R.id.register);
mAuth=FirebaseAuth.getInstance();
mAuthListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
FirebaseUser=firebaseAuth.getCurrentUser();
如果(用户!=null){
//新建HttpCall().checkGoogleEmail(上下文,电子邮件);
}
其他的
Log.d(“身份验证”、“用户注销”);
}
};
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestIdToken(getString(R.string.default_web_client_id)).requestEmail().build();
mGoogleApiClient=new GoogleApiClient.Builder(this).enableautomanager(this,this).addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso).build();
findviewbyd(R.id.sign_in_按钮);
findViewById(R.id.email\u sign\u in\u按钮);
mEmailField=(EditText)findViewById(R.id.email);
mPasswordField=(EditText)findViewById(R.id.password);
register.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
startActivity(新意图(LoginActivity.this,NewUserActivity.class));
}
});
}
@凌驾
受保护的void onStart(){
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@凌驾
受保护的void onStop(){
super.onStop();
if(mAuthListener!=null)
removeAuthStateListener(mAuthListener);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RC\u登录)
{
GoogleSignInResult结果=Auth.GoogleSignInApi.getSignInResultFromIntent(数据);
if(result.issucess())
{
GoogleSignInAccount account=result.getSignInAccount();
firebaseAuthWithGoogle(账户);
Email=mAuth.getCurrentUser().getEmail();
新建HttpCall().checkGoogleEmail(上下文,电子邮件);
}
其他的
Log.d(标记“Google登录失败”);
}
}
私有void firebaseAuthWithGoogle(谷歌签名帐户){
AuthCredential credential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.signInWithCredential(credential).addOnCompleteListener(这是新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(“AUTH”,“使用凭据登录:complete”+task.issusccessful());
}
});
}
私人无效签名()
{
意向符号=Auth.googlesignianpi.getsignient(mgoogleapclient);
startActivityForResult(签名、注册);
}
私有无效电子邮件签名()
{
字符串email=mEmailField.getText().toString();
字符串密码=mPasswordField.getText().toString();
if(TextUtils.isEmpty(电子邮件)| | TextUtils.isEmpty(密码))
{
Toast.makeText(LoginActivity.this,“字段为空”,Toast.LENGTH_SHORT.show();
}
其他的
{
final ProgressDialog ProgressDialog=ProgressDialog.show(LoginActivity.this,“请稍候…”,“处理…”,true);
(mAuth.使用电子邮件和密码登录(电子邮件,密码))
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
progressDialog.disclose();
if(task.issusccessful()){
Toast.makeText(LoginActivity.this,“登录成功”,Toast.LENGTH_LONG.show();
意图i=新意图(LoginActivity.this、AccountActivity.class);
i、 putExtra(“电子邮件”,mAuth.getCurrentUser().getEmail());
星触觉(i);
}否则{
Log.e(“错误”,task.getException().toString());
Toast.makeText(LoginActivity.this,task.getException().getMessage(),Toast.LENGTH_LONG.show();
}
}
});}
}
@凌驾
public void onconnection失败(@NonNull ConnectionResult ConnectionResult){
Log.d(标记“连接失败”);
}
这是我的密码
请帮我拿这个

我自己买的。我们必须在检查用户是否登录时调用新活动

mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

        FirebaseUser user = firebaseAuth.getCurrentUser();
        if(user!=null) {

           new HttpCall().checkGoogleEmail(context, Email);

        }

        else
            Log.d("AUTH","User logged out");
    }
};

我自己买的。我们必须在检查用户是否登录时调用新活动

mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

        FirebaseUser user = firebaseAuth.getCurrentUser();
        if(user!=null) {

           new HttpCall().checkGoogleEmail(context, Email);

        }

        else
            Log.d("AUTH","User logged out");
    }
};