如何使用 Firebase 安卓验证收到的用于手机号码验证的 OTP



我想在我的应用程序中添加手机号码验证模块。我为此使用了Firebase,并且OTP已成功发送到特定的手机号码,但我想验证输入的OTP是否等于发送到相应手机号码的OTP。

不想使用以下代码,

  mAuth.signInWithCredential(credential)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Toast.makeText(FirebasePhoneActivity.this, "Verification Success", Toast.LENGTH_SHORT).show();
                } else {
                    if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                        Toast.makeText(FirebasePhoneActivity.this, "Verification Failed, Invalid credentials", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
break; 

因为使用上面的代码允许用户使用手机号码登录。我只想交叉验证 OTP,不想使用手机号码登录。

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

使用上面的代码不会给出发送的代码,而是给出一个随机字符串值。

 PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
        codeReceivedByUser = phoneAuthCredential.getSmsCode();
    }

只有当OTP被接收到他的手机而不是其他人的手机时,才会调用上面的代码(当我们提供其他人的手机号码时)

有没有办法在不使用登录凭据方法的情况下验证发送到其他人的手机时的 OTP?请帮忙。提前谢谢。

尝试下面的代码(逐个调用方法)

private void setListener() {

        callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                Toast.makeText(context, "Verification Completed" + phoneAuthCredential, Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onVerificationFailed(FirebaseException e) {
                try {
                    ActivityHelper.dismissProgressDialog();
                } catch (Throwable throwable) {
                    CustomLogHandler.printErrorlog(throwable);
                }
                if (e instanceof FirebaseAuthInvalidCredentialsException) {
                    Toast.makeText(context ,"Verification Failed" + e, Toast.LENGTH_SHORT).show();
                } else if (e instanceof FirebaseTooManyRequestsException) {
                    Toast.makeText(context, "Verification Failed" + e, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(context, "Verification Failed" + e, Toast.LENGTH_SHORT).show();
                }
                isResendClicked = false;
            }
            @Override
            public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                super.onCodeSent(s, forceResendingToken);
                try {
                    ActivityHelper.dismissProgressDialog();
                } catch (Throwable throwable) {
                    CustomLogHandler.printErrorlog(throwable);
                }
                Toast.makeText(getActivity(), "Code sent to your registered device", Toast.LENGTH_SHORT).show();
                isResendClicked = false;
                verificationId = s;
                resendtoken = forceResendingToken;
            }
        };
    }


  private void callGetOTPApi() {
        try {
            ActivityHelper.showProgressDialog(getActivity(), "Loading...", false);
            PhoneAuthProvider.getInstance().verifyPhoneNumber(number, 60, TimeUnit.SECONDS, getActivity(), callbacks);
        } catch (Throwable throwable) {
            CustomLogHandler.printErrorlog(throwable);
        }

    }

最新更新