Firebase身份验证verifyPhoneNumber返回空引用

时间:2019-11-11 11:19:34

标签: java android firebase firebase-authentication

我正在尝试从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.Preconditions.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)

2 个答案:

答案 0 :(得分:0)

如果使用firestore的一切正常,但仍然无法正常工作,则可能是您将回调函数放在错误的位置。单击发送按钮后,应在创建周期中实现回调。如果您使用的是模拟器,那么这将不起作用,因此请使用真正的android设备之一,它将起作用。

答案 1 :(得分:0)

回调

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发送到输入的号码(必须输入国家/地区代码)

private void sendOtpToUser(String number) {
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            "+91" + number,
            60,
            TimeUnit.SECONDS,
            TaskExecutors.MAIN_THREAD,
            mCallbacks);
}

验证收到的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
            }
        });

不要忘记在Firebase身份验证中启用电话登录方法。

希望对您有所帮助:)