【发布时间】:2018-08-22 12:04:50
【问题描述】:
不知道我做错了什么,我已经在 Stack Overflow 上搜索并阅读文章和观看视频,但仍然没有解决方案。
基本上我想通过 Firebase 向用户的手机发送短信以验证电话号码。我的应用程序不在 Play 商店或类似的地方,我只是通过使用 USB 电缆将手机连接到 PC 来运行它。
据我所知,我已正确设置。这是我在 Android Studio 中看到的:
这是我的代码:
MainActivity.java
public class MainActivity extends AppCompatActivity {
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() < 10 ){
editTextPhone.setError("Please enter a valid phone");
editTextPhone.requestFocus();
return;
}
System.out.println("code should be sent");
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phone, // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
this, // Activity (for callback binding)
mCallbacks); // OnVerificationStateChangedCallbacks
}
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;
}
};
}
当我单击获取验证按钮时,我在日志中看到System.out.println,“应该发送代码”,所以按钮工作正常,只是没有发送代码。请问有什么想法吗?
另外,我相信我已经正确设置了我的 SHA-1。我通过单击 Gradle 选项卡中的“signingReport”并将数字复制到 Firebase 控制台从 Android Studio 获得它,如下所示。
【问题讨论】:
-
可能是免打扰服务,不确定。也可以用其他号码试试。并尝试打印一些登录
onVerificationFailed()和onCodeSent() -
@CHarris,您是否在 firebase 控制台中设置了应用的 SHA-1 哈希?
-
@RaviRupareliya 试过不同的手机,都不行。
-
@NiravBhavsar 我最初确实设置了 SHA-1,但没有工作,但后来我删除了该项目,因为不确定它是否设置正确,开始了一个新的 Firebase 项目,这次没有设置 SHA-1,因为我真的想从最基本的开始并逐个消除可能的问题。SHA-1 是必需的,即使不在 Play 商店中?
-
@CHarris,是的,当您在调试模式和发布模式下运行时,SHA-1 是必需的。
标签: java android firebase firebase-authentication