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

Posted

技术标签:

【中文标题】如何使用 Firebase android 验证收到的用于手机号码验证的 OTP【英文标题】:How to validate the OTP received for mobile number verification using Firebase android 【发布时间】:2019-05-24 01:46:10 【问题描述】:

我想在我的应用程序中添加手机号码验证模块。我为此使用了 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时才会被调用,而不是在其他人的手机中(当我们提供其他人的手机号码时)

在不使用 signInWithCredential 方法将 OTP 发送到其他人的手机时,有什么方法可以验证 OTP?请帮忙。提前致谢。

【问题讨论】:

你分享的代码没有显示任何关于实时数据库的信息,所以我删除了那个标签。请仅应用与您提出的问题相关的标签。 @FrankvanPuffelen 当然。谢谢你的提示。我可以就我面临的问题获得任何帮助吗? 【参考方案1】:

试试下面的代码(一一调用方法)

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);
        


    

【讨论】:

以上是关于如何使用 Firebase android 验证收到的用于手机号码验证的 OTP的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用Firebase进行Facebook身份验证无法启动

用于 Firebase 实时数据库/Firebase 身份验证的 Android 唯一密钥

使用带有 android firebase 短信认证的模拟器

在 Unity Firebase SDK 中禁用广告 ID (AAID) 收集运行时

无法将 Firebase 连接到 Android 应用 |此应用无权使用 Firebase 身份验证

Firebase 电话身份验证打开浏览器以在 Android 中进行重新验证