如何使用 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) 收集运行时