我的应用具有用于用户注册和登录Firebase的电话身份验证方法的某些应用程序在某些设备上运行良好,但是在一个设备中,它仅在我第一次检查时才发送验证短信。之后,我什至从Firebase控制台中删除了该帐户,但是在再次注册该号码时它没有发送任何验证码。
public class phone_no_verification extends AppCompatActivity {
ProgressBar verify_progress;
TextInputEditText verify_edittext;
TextInputLayout verify_textInput;
String mverificationID;
FirebaseAuth auth;
static String TAG;
SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_no_verification);
verify_progress = findViewById(R.id.verify_progress);
verify_edittext = findViewById(R.id.verify_edittext);
verify_textInput = findViewById(R.id.verify_textinputLayout);
auth = FirebaseAuth.getInstance();
//getting Intent mobile number
Intent intent = getIntent();
String mobile = intent.getStringExtra("mobile_no");
sendVerificationcode(mobile);
//Entering code manually
findViewById(R.id.verify_Button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = verify_edittext.getText().toString().trim();
if(code.isEmpty() || code.length() < 6){
verify_textInput.setError("Enter Valid code");
}
else{
verifyVerificationCode(code);}
}
});
}
private void sendVerificationcode(String mobile) {
PhoneAuthProvider.getInstance().verifyPhoneNumber
("+91" + mobile,60, TimeUnit.SECONDS,
TaskExecutors.MAIN_THREAD,mcallbacks);
}
//callback to detect verification status
PhoneAuthProvider.OnVerificationStateChangedCallbacks mcallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
mverificationID = s;
}
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
Log.d(TAG, "onVerificationCompleted:" + phoneAuthCredential);
String code = phoneAuthCredential.getSmsCode();
if(code != null){
verify_edittext.setText(code);
verifyVerificationCode(code);
}
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
Toast.makeText(phone_no_verification.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
};
private void verifyVerificationCode(String code) {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mverificationID,code);
//signing user
signInWithPhoneAuthCredential(credential);
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
auth.signInWithCredential(credential).addOnCompleteListener(phone_no_verification.this
, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Intent intent = new Intent(phone_no_verification.this, Basic_activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
sp = getSharedPreferences("login",MODE_PRIVATE);
sp.edit().putBoolean("isAutheticated",true).apply();
}
else{
String message = "Somthing is wrong, we will fix it soon...";
if(task.getException() instanceof FirebaseAuthInvalidCredentialsException){
message = "Invalid code Entered..";
}
else if(task.getException() instanceof FirebaseAuthUserCollisionException){
message = "User Already Exists";
}
Toast.makeText(phone_no_verification.this,message,Toast.LENGTH_LONG).show();
}
}
});
}
}