【问题标题】:Firebase Authentication verifyPhoneNumber returns null referenceFirebase 身份验证 verifyPhoneNumber 返回空引用
【发布时间】:2020-03-07 01:54:30
【问题描述】:

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

【问题讨论】:

  • 检查设备是否有google play服务并开启手机认证。
  • 确保您提供了带有国家代码的号码
  • 请编辑问题以显示您传递给verifyPhoneNumber 的所有变量的确切值。我们应该能够准确地复制您所看到的内容。 stackoverflow.com/help/mcve
  • 有人回答这个问题吗??

标签: java android firebase firebase-authentication


【解决方案1】:

回调

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 
    }
};

向输入的号码发送一次性密码(国家代码是必须的)

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 Auth 中启用电话登录方法。

希望对你有帮助:)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2017-06-30
      • 2023-04-03
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多