Java 如何在我';你第一次登出吗?

Java 如何在我';你第一次登出吗?,java,android,authentication,one-time-password,Java,Android,Authentication,One Time Password,在我第一次登录并注销后,下一次登录时,我不会获得OTP。 我如何解决这个问题?? 如果我第一次输入电话号码,代码可以正常工作。第二次以后,我没有得到OTP号码。为了获得OTP号码,我每次都需要重新启动手机。如果我关闭并重新打开应用程序,那么它对我也没有帮助 验证电话活动 public class VerifyPhoneActivity extends AppCompatActivity { private String verificationId; private Fireb

在我第一次登录并注销后,下一次登录时,我不会获得OTP。 我如何解决这个问题?? 如果我第一次输入电话号码,代码可以正常工作。第二次以后,我没有得到OTP号码。为了获得OTP号码,我每次都需要重新启动手机。如果我关闭并重新打开应用程序,那么它对我也没有帮助

验证电话活动

public class VerifyPhoneActivity extends AppCompatActivity {

    private String verificationId;
    private FirebaseAuth mAuth;
    private ProgressBar progressBar;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_verify_phone);

        mAuth = FirebaseAuth.getInstance();

        editText = findViewById(R.id.editTextCode);

        progressBar =findViewById(R.id.progressbar);

        String phonenumber = getIntent().getStringExtra("phonenumber");
        setVerificationCode(phonenumber);

        findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String code = editText.getText().toString().trim();
                if(code.isEmpty() || code.length()< 6){
                    editText.setError("Enter code");
                    editText.requestFocus();
                    return;
                }
                verifyCode(code);

            }
        });

    }

    private void verifyCode(String code){
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
        SignInWithCredential(credential);
    }

    private void SignInWithCredential(PhoneAuthCredential credential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){

                            Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                            startActivity(intent);
                        }else {
                            Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(),Toast.LENGTH_LONG).show();
                        }

                    }
                });
    }

    private void setVerificationCode(String number){
        progressBar.setVisibility(View.VISIBLE);
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                number,
                60,
                TimeUnit.SECONDS,
                TaskExecutors.MAIN_THREAD,
                mCallBack
        );
    }

    private PhoneAuthProvider.OnVerificationStateChangedCallbacks
            mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);
            verificationId = s;
        }

        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
            String code =phoneAuthCredential.getSmsCode();
            if(code != null){
                editText.setText(code);
                SignInWithCredential(phoneAuthCredential);
            }

        }

        @Override
        public void onVerificationFailed(FirebaseException e) {
            Toast.makeText(VerifyPhoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();

        }
    };
公共类VerifyPhoneActivity扩展了AppCompatActivity{
私有字符串验证ID;
私人消防队;
私人ProgressBar ProgressBar;
私人编辑文本;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u verify\u phone);
mAuth=FirebaseAuth.getInstance();
editText=findViewById(R.id.editTextCode);
progressBar=findViewById(R.id.progressBar);
字符串phonenumber=getIntent().getStringExtra(“phonenumber”);
setVerificationCode(电话号码);
findViewById(R.id.buttonSignIn).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
字符串代码=editText.getText().toString().trim();
if(code.isEmpty()| code.length()<6){
setError(“输入代码”);
editText.requestFocus();
返回;
}
验证码(code);
}
});
}
专用无效验证码(字符串码){
PhoneAuthCredential credential=PhoneAuthProvider.getCredential(验证ID,代码);
使用凭证(凭证)登录;
}
private void SignInWithCredential(PhoneAuthCredential凭据){
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
意向意向=新意向(VerifyPhoneActivity.this、ProfileActivity.class);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);
星触觉(意向);
}否则{
Toast.makeText(VerifyPhoneActivity.this,task.getException().getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
私有void setVerificationCode(字符串编号){
progressBar.setVisibility(View.VISIBLE);
PhoneAuthProvider.getInstance().verifyPhoneNumber(
数字,
60,
时间单位:秒,
TaskExecutors.MAIN_线程,
麦卡贝克
);
}
私有PhoneAuthProvider.OnVerificationStateChangedCallbacks
mCallBack=新建PhoneAuthProvider.OnVerificationStateChangedCallbacks(){
@凌驾
public void onCodeSent(字符串s,PhoneAuthProvider.ForceResendingToken ForceResendingToken){
超级OnCondent(s,forceResendingToken);
验证ID=s;
}
@凌驾
已完成验证的公共无效(PhoneAuthCredential PhoneAuthCredential){
字符串代码=phoneAuthCredential.getSmsCode();
如果(代码!=null){
editText.setText(代码);
使用凭据登录(phoneAuthCredential);
}
}
@凌驾
public void onVerificationFailed(FirebaseException e){
Toast.makeText(VerifyPhoneActivity.this,e.getMessage(),Toast.LENGTH_LONG.show();
}
};

如果mobile在firebase上注册,您应该阅读文档,因为它不会一直发送OTP,可能会发送几次


一旦手机注册成功,您就可以进行验证。

如果手机在firebase上注册,您应该阅读文档,因为它不会一直发送OTP,可能只发送几次


一旦手机注册成功,您就可以进行验证。

不帮助…:(不帮助…:)您在我的应用程序中有针对同一问题的解决方案吗?您在我的应用程序中有针对同一问题的解决方案吗