我正面临着一些不同类型的问题。我在我的应用程序中使用Firebase Mobile编号身份验证。当我尝试将OTP发送到我正在使用的同一个手机号码时,OTP不会发送。但是,如果我从我的移动OTP向其他手机发送OTP正在发送。我还发现如果我从其他手机发送OTP到我的号码OTP即将到来。因此,没有手机号码的问题。在调试时我发现此代码块无法正常工作
@Override
public void onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(verificationId, forceResendingToken);
Log.e(TAG, "onCodeSent: s - " + verificationId + " : t - " + forceResendingToken);
xVerificationId = verificationId;
}
对于其他数字,它正在工作,验证和forceResendingToken正在生成。
答案 0 :(得分:2)
正如已经说明的那样,
会自动验证电话号码这就是onCodeSent()
无法正常工作的原因。
现在,为了摆脱这个问题,您将需要实现onVerificationCompleted()
,大多数机会是您已经实现了它,但是您不知道里面放了什么。
如果您位于onVerificationCompleted()内,则可能没有OTP,但您确实拥有phoneAuthCredential
,您只需要将此变量传递给mAuth.signInWithCredential()
,这应该会导致您您想要的输出。
的示例代码:
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
Toast.makeText(getApplicationContext(),"Verifying code Automatically",LENGTH_LONG).show();
signInWithCredential(phoneAuthCredential);
}
的示例代码:
private void signInWithCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
// Log.d(TAG, "signInWithCredential:success");
} else {
// Sign in failed, display a message and update the UI
// Log.w(TAG, "signInWithCredential:failure", task.getException());
}
}
}
});
}
答案 1 :(得分:2)
为我工作。
有时Google无法验证来自您应用的请求。 为了解决它。重新生成您的应用程序的签名报告,并获取SHA-1或SHA-256指纹。 转到您的Firebase项目设置并添加这些指纹。
答案 2 :(得分:2)
更新SHA1指纹。它对我有用。
答案 3 :(得分:1)
您是否正在实施onVerificationCompleted
?在以下两种情况下,不会发送OTP,如https://firebase.google.com/docs/auth/android/phone-auth中所述:
在这种情况下,您将直接获得PhoneAuthCredential。
答案 4 :(得分:0)
如果您已在Firebase(登录方法->电话)下的测试中添加了电话号码。然后请从那里删除以获取otp。
答案 5 :(得分:0)
对我来说,由于更改了包名称并生成了新的google-services.json,因此应用程序ID未更新。
更新“ applicationid”解决了该问题!
答案 6 :(得分:0)
在androidx.browser:browser:1.2.0
文件中使用依赖项实现'build.gradle
'。 Firebase现在希望通过图像检查验证,此依赖项将允许打开浏览器,并且验证码将得到验证,您将获得OTP。