我目前正在使用电子邮件/密码登录并注册。
我想在注册时添加电话号码(使用otp验证)
,并且将使用(电子邮件或电话(EditText)+密码(EditText))登录。
问题是我能做到吗?还是不?
如果可以的话,我要添加什么
登录活动:
private TextInputLayout mEmail,mPass;
private Button mLogin,mCallRegister ;
private ProgressDialog mProgress;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener fbAutLis;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_login);
//progress bar
mProgress =new ProgressDialog(this);
String titleId="Signing in...";
mProgress.setTitle(titleId);
mProgress.setMessage("Please Wait...");
mAuth= FirebaseAuth.getInstance();
fbAutLis= new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user =FirebaseAuth.getInstance().getCurrentUser();
if (user != null){
mProgress.dismiss();
Intent inte =new Intent(ClientLoginAct.this,ClientMapAct.class);
startActivity(inte);
finish();
return ;
}
}
};
mEmail =(TextInputLayout)findViewById(R.id.email);
mPass =(TextInputLayout)findViewById(R.id.pass);
mLogin =(Button)findViewById(R.id.login);
mCallRegister =(Button) findViewById(R.id.callRegister);
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if( !validateEmail()|!validatePassword()){
return;
}
mProgress.show();
final String email=mEmail.getEditText().getText().toString();
final String password=mPass.getEditText().getText().toString();
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(ClientLoginAct.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()){
mProgress.dismiss();
Snackbar.make(v, "Email or Password incorrect", Snackbar.LENGTH_LONG).show();
//Toast.makeText(ClientLoginAct.this,"Email or Password incorrect ",Toast.LENGTH_SHORT).show();
}
}
});
}
});
mCallRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ClientLoginAct.this,ClientRegAct.class);
startActivity(intent);
}
});
}
private Boolean validateEmail() {
String val = mEmail.getEditText().getText().toString();
String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
if (val.isEmpty()) {
mEmail.setError("Field cannot be empty");
return false;
} else if (!val.matches(emailPattern)) {
mEmail.setError("Invalid email address");
return false;
} else {
mEmail.setError(null);
mEmail.setErrorEnabled(false);
return true;
}
}
private Boolean validatePassword() {
String val = mPass.getEditText().getText().toString();
String passwordVal = "^" +
//"(?=.*[0-9])" + //at least 1 digit
//"(?=.*[a-z])" + //at least 1 lower case letter
//"(?=.*[A-Z])" + //at least 1 upper case letter
//"(?=.*[@#$%^&+=])" + //at least 1 special character
"(?=.*[a-zA-Z0-9])" + //any letter
"(?=\\S+$)" + //no white spaces
".{6,}" + //at least 6 characters
"$";
if (val.isEmpty()) {
mPass.setError("Field cannot be empty");
return false;
} else if (!val.matches(passwordVal)) {
mPass.setError("Password is too weak(at least 6 characters & no white spaces)");
return false;
} else {
mPass.setError(null);
mPass.setErrorEnabled(false);
return true;
}
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(fbAutLis);
}
@Override
protected void onStop() {
super.onStop();
mAuth.removeAuthStateListener(fbAutLis);
}
}
这是“注册”活动:
private TextInputLayout mEmail,mPass;
private Button mRegister,mCallLogin;
private ProgressDialog mProgress;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener fbAutLis;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_reg);
//progress bar
mProgress =new ProgressDialog(this);
String titleId="Signing up...";
mProgress.setTitle(titleId);
mProgress.setMessage("Please Wait...");
mAuth= FirebaseAuth.getInstance();
fbAutLis= new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user =FirebaseAuth.getInstance().getCurrentUser();
if (user != null){
mProgress.dismiss();
Intent inte =new Intent(ClientRegAct.this,ClientMapAct.class);
startActivity(inte);
finish();
return ;
}
}
};
mEmail =(TextInputLayout)findViewById(R.id.email);
mPass =(TextInputLayout)findViewById(R.id.pass);
// mPhone =(TextInputLayout)findViewById(R.id.phone);
mRegister =(Button)findViewById(R.id.register);
mCallLogin =(Button) findViewById(R.id.callLogin);
mRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if( !validateEmail()|!validatePassword()){
return;
}
mProgress.show();
final String email=mEmail.getEditText().getText().toString();
final String password=mPass.getEditText().getText().toString();
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(ClientRegAct.this,new OnCompleteListener<AuthResult>(){
@Override
public void onComplete(@NonNull Task<AuthResult> task){
if (!task.isSuccessful()){
mProgress.dismiss();
Snackbar.make(v, "This email is already exist", Snackbar.LENGTH_LONG).show();
//Toast.makeText(ClientRegAct.this,"This email is already exist",Toast.LENGTH_SHORT).show();
}else{
String user_id= mAuth.getCurrentUser().getUid();
DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference().child("Users").child("Clients").child(user_id);
current_user_db.setValue(true);
}
}
});
}
});
mCallLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
private Boolean validateEmail() {
String val = mEmail.getEditText().getText().toString();
String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
if (val.isEmpty()) {
mEmail.setError("Field cannot be empty");
return false;
} else if (!val.matches(emailPattern)) {
mEmail.setError("Invalid email address");
return false;
} else {
mEmail.setError(null);
mEmail.setErrorEnabled(false);
return true;
}
}
private Boolean validatePassword() {
String val = mPass.getEditText().getText().toString();
String passwordVal = "^" +
//"(?=.*[0-9])" + //at least 1 digit
//"(?=.*[a-z])" + //at least 1 lower case letter
//"(?=.*[A-Z])" + //at least 1 upper case letter
//"(?=.*[@#$%^&+=])" + //at least 1 special character
"(?=.*[a-zA-Z0-9])" + //any letter
"(?=\\S+$)" + //no white spaces
".{6,}" + //at least 6 characters
"$";
if (val.isEmpty()) {
mPass.setError("Field cannot be empty");
return false;
} else if (!val.matches(passwordVal)) {
mPass.setError("Password is too weak(at least 6 characters & no white spaces)");
return false;
} else {
mPass.setError(null);
mPass.setErrorEnabled(false);
return true;
}
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(fbAutLis);
}
@Override
protected void onStop() {
super.onStop();
mAuth.removeAuthStateListener(fbAutLis);
}
}
此活动代码Vérify_Otp,但我不知道如何与其他活动链接:
String verificationCodeBySystem;
private Button mVerify;
private EditText mCode;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_otp_verify);
mVerify = findViewById(R.id.verify_btn);
mCode = findViewById(R.id.verification_code_entered_by_user);
mProgressBar = findViewById(R.id.progress_bar);
String phoneNo = getIntent().getStringExtra("phoneNo");
sendVerificationCodeToUser(phoneNo);
mVerify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = mCode.getText().toString();
if (code.isEmpty() || code.length() < 6) {
mCode.setError("Wrong OTP...");
mCode.requestFocus();
return;
}
mProgressBar.setVisibility(View.VISIBLE);
verifycode(code);
}
});
}
private void sendVerificationCodeToUser(String phoneNo) {
PhoneAuthProvider.getInstance().verifyPhoneNumber(
"+213" + phoneNo, // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
TaskExecutors.MAIN_THREAD, // Activity (for callback binding)
mCallbacks); // OnVerificationStateChangedCallbacks
}
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
verificationCodeBySystem = s ;
}
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
String code = phoneAuthCredential.getSmsCode();
if(code!=null){
mProgressBar.setVisibility(View.VISIBLE);
verifycode(code);
}
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
Toast.makeText(OtpVerify.this,e.getMessage(),Toast.LENGTH_SHORT).show();
}
};
private void verifycode (String codeByUser){
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationCodeBySystem,codeByUser);
signInTheUserByCredentials(credential);
}
private void signInTheUserByCredentials(PhoneAuthCredential credential){
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
firebaseAuth.signInWithCredential(credential).addOnCompleteListener(OtpVerify.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(OtpVerify.this, "Your Account has been created successfully!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(OtpVerify.this,ClientMapAct.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK );
startActivity(intent);
}else{
Toast.makeText(OtpVerify.this,task.getException().getMessage(),Toast.LENGTH_SHORT).show();
}
}
});
}
所以请改变一下内容,以使我在第一行中得到要求...