![](/img/trans.png)
[英]how we stop or disable instant verification in firebase phone number authentication in android
[英]Android Phone Number Verification in Firebase
我正在尝试创建一个登录屏幕,该屏幕将在 Firebase 中使用电话号码身份验证。 我写了一段代码;
package com.example.logindeneme;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;
import java.util.concurrent.TimeUnit;
public class PhoneLoginActivity extends AppCompatActivity {
private Button SendVerificationButton, VerifyButton;
private EditText InputPhoneNumber, InputVerificationCode;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks;
private FirebaseAuth mAuth;
private ProgressDialog loadingBar;
private String mVerificationId;
private PhoneAuthProvider.ForceResendingToken mResendToken;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_login);
mAuth = FirebaseAuth.getInstance();;
SendVerificationButton = (Button) findViewById(R.id.send_ver_code_button);
VerifyButton = (Button)findViewById(R.id.verify_button);
InputPhoneNumber = (EditText) findViewById(R.id.phone_number_input);
InputVerificationCode = (EditText) findViewById(R.id.verification_code_input);
loadingBar = new ProgressDialog(this);
SendVerificationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phoneNumber = InputPhoneNumber.getText().toString();
if(TextUtils.isEmpty(phoneNumber)){
Toast.makeText(PhoneLoginActivity.this, "Please enter your phone number first...", Toast.LENGTH_SHORT).show();
}
else{
loadingBar.setTitle("Phone Verification");
loadingBar.setMessage("please wait, while we are authenticating your phone...");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber, // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
PhoneLoginActivity.this, // Activity (for callback binding)
callbacks); // OnVerificationStateChangedCallbacks
}
}
});
VerifyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SendVerificationButton.setVisibility(View.INVISIBLE);
InputPhoneNumber.setVisibility(View.INVISIBLE);
String verificationCode = InputVerificationCode.getText().toString();
if(TextUtils.isEmpty(verificationCode)){
Toast.makeText(PhoneLoginActivity.this, "Please write verification code first...", Toast.LENGTH_SHORT).show();
}
else{
loadingBar.setTitle("Verification Code");
loadingBar.setMessage("please wait, while we are verifying verification code...");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, verificationCode);
signInWithPhoneAuthCredential(credential);
}
}
});
callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
signInWithPhoneAuthCredential(phoneAuthCredential);
}
@Override
public void onVerificationFailed(FirebaseException e) {
loadingBar.dismiss();
Toast.makeText(PhoneLoginActivity.this, "Invalid Phone Number, Please enter correct phone number with your country code...", Toast.LENGTH_SHORT).show();
SendVerificationButton.setVisibility(View.VISIBLE);
InputPhoneNumber.setVisibility(View.VISIBLE);
VerifyButton.setVisibility(View.INVISIBLE);
InputVerificationCode.setVisibility(View.INVISIBLE);
}
public void onCodeSent(String verificationId,
PhoneAuthProvider.ForceResendingToken token) {
// Save verification ID and resending token so we can use them later
mVerificationId = verificationId;
mResendToken = token;
loadingBar.dismiss();
Toast.makeText(PhoneLoginActivity.this, "Code has been sent, please check and verify.", Toast.LENGTH_SHORT).show();
SendVerificationButton.setVisibility(View.INVISIBLE);
InputPhoneNumber.setVisibility(View.INVISIBLE);
VerifyButton.setVisibility(View.VISIBLE);
InputVerificationCode.setVisibility(View.VISIBLE);
}
};
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
loadingBar.dismiss();
Toast.makeText(PhoneLoginActivity.this, "Congratulations, you're logged in successfully...", Toast.LENGTH_SHORT).show();
SendUserToMainActivity();
}
else {
String message = task.getException().toString();
Toast.makeText(PhoneLoginActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
}
}
});
}
private void SendUserToMainActivity() {
Intent mainIntent = new Intent(PhoneLoginActivity.this,MainActivity.class);
startActivity(mainIntent);
finish();
}
}
但是当我尝试输入我的电话号码并想要一个代码时,总是说“电话号码无效”。 但是,如果我在 Firebase 的测试电话号码中输入我的号码和随机验证码,并且如果我在我的应用中输入; 有用。
我的国家使用“+90”电话代码。 所以我尝试了 +9053XXXXXXXX、+90 53X XXX XX XX、+90-53X-XXX-XX-XX 等,但从未奏效。
我的错在哪里? 你能修好它吗 ?
@Wicaledon 转到您的 Firebase 控制台。
在设置中,输入您添加的 SHA-1 密钥。
这肯定会奏效。
获取 SHA-1 密钥https://developers.google.com/android/guides/client-auth
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.