Java Firebase身份验证verifyPhoneNumber返回空引用

Java Firebase身份验证verifyPhoneNumber返回空引用,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我正在尝试从Firebase身份验证获取验证短信 当我点击(验证我的电话号码)时,它崩溃并在verifyPhoneNumber行返回空引用 请帮帮我 我试着换电话号码 我搜索了很多,却无法解决它 private void sendVerificationCode(String phone) { PhoneAuthProvider.getInstance().verifyPhoneNumber( phone, // Phone numb

我正在尝试从Firebase身份验证获取验证短信 当我点击(验证我的电话号码)时,它崩溃并在verifyPhoneNumber行返回空引用 请帮帮我

我试着换电话号码 我搜索了很多,却无法解决它

private void sendVerificationCode(String phone) {
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                phone,        // Phone number to verify
                60,                 // Timeout duration
                TimeUnit.SECONDS,   // Unit of timeout
                this,               // Activity (for callback binding)
                mCallbacks);        // OnVerificationStateChangedCallbacks
    }
原因:java.lang.NullPointerException:空引用 在com.google.android.gms.common.internal.premissions.checkNotNull(未知)上 资料来源:2) 在com.google.firebase.auth.PhoneAuthProvider.verifyPhoneNumber上(com.google.firebase:firebase auth@@19.1.0:9) 位于com.ullb.help.VerifyPhoneActivity.sendVerificationCode(VerifyPhoneActivity.java:67) 位于com.ullb.help.VerifyPhoneActivity.onCreate(VerifyPhoneActivity.java:39) 位于android.app.Activity.performCreate(Activity.java:7383) 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218) 位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3256)


如果firestore的一切正常,但仍然无法正常工作,那么问题可能是您将回调放在了错误的位置。单击“发送”按钮后,应在“创建循环”中实现回调。如果您使用的是emulator,那么这不起作用,所以请使用真正的android device one,它会起作用。

回调

private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
        String code = phoneAuthCredential.getSmsCode();
        if (code != null) {
            verifyCode(code);
            phoneOtpEdt.setText(code);
        }
    }

    @Override
    public void onVerificationFailed(@NonNull FirebaseException e) {
        Toast.makeText(getApplicationContext(), e.getMessage() + "Verification Failed", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
        super.onCodeSent(s, forceResendingToken);
        verificationID = s; //Create your own instance variable 
    }
};
向输入的号码发送OTP(必须输入国家代码)

验证收到的OTP

    private void verifyCode(String code) {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationID, code);
        FirebaseAuth auth = FirebaseAuth.getInstance();
        auth.signInWithCredential(credential).addOnCompleteListener(LogInActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
//                    do something
                } else
                    // do something
            }
        });
private void验证码(字符串码){
PhoneAuthCredential credential=PhoneAuthProvider.getCredential(验证ID,代码);
FirebaseAuth auth=FirebaseAuth.getInstance();
auth.signInWithCredential(credential).addOnCompleteListener(LogInActivity.this,new OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//做点什么
}否则
//做点什么
}
});
别忘了在Firebase Auth中启用电话登录方法


我希望它有帮助:)

检查设备是否有google play服务,是否启用了电话身份验证。确保您提供了带有国家/地区代码的号码。请编辑问题,以显示您传递给
verifyPhoneNumber
的所有变量的准确值。我们应该能够准确复制您看到的内容。有人知道吗对这个发誓??
    private void verifyCode(String code) {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationID, code);
        FirebaseAuth auth = FirebaseAuth.getInstance();
        auth.signInWithCredential(credential).addOnCompleteListener(LogInActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
//                    do something
                } else
                    // do something
            }
        });