我正在尝试从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)
答案 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身份验证中启用电话登录方法。
希望对您有所帮助:)