Dra*_*ire 5 android firebase firebase-authentication
嗨,我正在尝试使用Firebase在android中进行电话身份验证。第一次安装该应用程序时,短信会出现,并且验证成功,但随后短信不会再出现。我已从Firebase中的auth删除用户,但仍无法正常工作。
以下是我的代码。
MainActivity.java
public class MainActivity extends AppCompatActivity {
CountryCodePicker ccp;
EditText editTextPhone, editTextCode;
FirebaseAuth mAuth;
String codeSent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
editTextCode = findViewById(R.id.editTextCode);
editTextPhone = findViewById(R.id.editTextPhone);
findViewById(R.id.buttonGetVerificationCode).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendVerificationCode();
}
});
findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
verifySignInCode();
}
});
}
private void verifySignInCode() {
String code = editTextCode.getText().toString();
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(codeSent, code);
signInWithPhoneAuthCredential(credential);
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//here you can open new activity
Toast.makeText(getApplicationContext(),
"Login Successfull", Toast.LENGTH_LONG).show();
} else {
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
Toast.makeText(getApplicationContext(),
"Incorrect Verification Code ", Toast.LENGTH_LONG).show();
}
}
}
});
}
private void sendVerificationCode() {
String phone = editTextPhone.getText().toString();
if (phone.isEmpty()) {
editTextPhone.setError("Phone number is required");
editTextPhone.requestFocus();
return;
}
if (phone.length() < 6 || phone.length() > 13) {
editTextPhone.setError("Please enter a valid phone");
editTextPhone.requestFocus();
return;
}
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phone, // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
this, // Activity (for callback binding)
mCallbacks); // OnVerificationStateChangedCallbacks
Toast.makeText(MainActivity.this,
"SMS Sent, Please Wait....", Toast.LENGTH_LONG).show();
editTextCode.requestFocus();
}
PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
}
@Override
public void onVerificationFailed(FirebaseException e) {
}
@Override
public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
codeSent = s;
}
};
}
Run Code Online (Sandbox Code Playgroud)
通过EDIT 重新启动手机,可以在上述功能中设置的60秒超时后重新发送短信。因此,似乎手机正在将某些内容保留在内存中。
如果有人不明白不再发送短信的概念或原因,请查看我的以下详细信息。我一直很困惑,为什么我第二次,第三次等等都没有收到短信..
首先阅读原始文档:
onVerificationCompleted(PhoneAuthCredential)
这个方法在两种情况下被调用:
- 即时验证:在某些情况下,无需发送或输入验证码即可即时验证电话号码。
- 自动检索:在某些设备上,Google Play 服务可以自动检测传入的验证短信并在无需用户操作的情况下执行验证。(某些运营商可能无法使用此功能。)
我发现了什么:
验证完成:
仅在发生即时验证或自动检索时调用。
当您第一次尝试此操作时,您将从 Google 获得 otp 代码,但下次尝试时,它可能会导致即时验证生效。
你可以做:
因此,如果您正在调试并且遇到无法从谷歌接收 otp 代码的问题,只需禁用您的 SIM 卡并再次启用它。这将帮助您再次从 google 获取 otp 代码,直到您输入代码并再次激活即时验证
请注意:
我认为目前没有任何方法可以禁用即时验证。但是您始终可以以一种不会给您和您的用户带来任何问题的方式优化您的代码。
如果您想探索更多,请查看线程:单击此处
小智 5
就我而言,我的电话号码在
测试电话(可选)
从那里删除它,firebase开始向我的号码发送SMS代码。Spark Plan每月提供1万次电话授权。这样一来,您无需花一分钱即可测试和部署应用。
| 归档时间: |
|
| 查看次数: |
3356 次 |
| 最近记录: |