Firebase未向手机号码发送OTP

时间:2018-02-12 06:24:02

标签: android firebase firebase-authentication

我正面临着一些不同类型的问题。我在我的应用程序中使用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正在生成。

7 个答案:

答案 0 :(得分:2)

正如已经说明的那样,

会自动验证电话号码
  1. 即时验证或
  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项目设置并添加这些指纹。

How to generate fingerprints

答案 2 :(得分:2)

更新SHA1指纹。它对我有用。

答案 3 :(得分:1)

您是否正在实施onVerificationCompleted?在以下两种情况下,不会发送OTP,如https://firebase.google.com/docs/auth/android/phone-auth中所述:

  • 即时验证:无需发送OTP即可立即验证电话号码。
  • 自动检索:Google Play服务可以自动检测OTP而无需任何用户操作。

在这种情况下,您将直接获得PhoneAuthCredential。

答案 4 :(得分:0)

如果您已在Firebase(登录方法->电话)下的测试中添加了电话号码。然后请从那里删除以获取otp。

答案 5 :(得分:0)

对我来说,由于更改了包名称并生成了新的google-services.json,因此应用程序ID未更新。

更新“ applicationid”解决了该问题!

答案 6 :(得分:0)

androidx.browser:browser:1.2.0文件中使用依赖项实现'build.gradle'。 Firebase现在希望通过图像检查验证,此依赖项将允许打开浏览器,并且验证码将得到验证,您将获得OTP。