Android 如何自动登录到Google OAuth以访问已知用户帐户
我正在我的应用程序中使用google firebase 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
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");
}
};