Я пытаюсь реализовать двухэтапную проверку с помощью Firebase Auth. Когда пользователь переходит к PelephoneActivity, у него есть уникальный uuid, который он получает при подписке по электронной почте.В PelephoneActivity я пытаюсь получить также номер телефона пользователя.
Мне на самом деле не нужна другая авторизация, но я не знаю, как остановить аутентификацию после получения смс-кода.
В любом случае, мой код:
public class PelephoneActivity extends AppCompatActivity {
private static final String TAG = "PelephoneActivity";
private FirebaseAuth mAuth;
private DatabaseReference UsersRef;
String currentUserID;
private Spinner spinner;
private EditText editText;
private String verificationId,phoneNumber;
private ProgressBar progressBar;
private EditText editTextC;
private Button signIn;
private TextView plsWait;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pelephone);
Log.d(TAG, "onCreate: started.");
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
UsersRef = FirebaseDatabase.getInstance().getReference().child("users").child(currentUserID);
spinner = findViewById(R.id.spinnerCountries);
spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, CountryData.countryNames));
editText = findViewById(R.id.editTextPhone);
//////////////////////////////////////////////
progressBar = findViewById(R.id.progressbar);
editTextC = findViewById(R.id.editTextCode);
signIn=findViewById(R.id.buttonSignIn);
editTextC.setVisibility(View.INVISIBLE);
signIn.setVisibility(View.INVISIBLE);
plsWait.setVisibility(View.INVISIBLE);
/////////////////////////////////////////////
findViewById(R.id.buttonContinue).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = CountryData.countryAreaCodes[spinner.getSelectedItemPosition()];
String number = editText.getText().toString().trim();
if (number.isEmpty() || number.length() < 9) {
editText.setError("Valid number is required");
editText.requestFocus();
return;
}
phoneNumber = "+" + code + number;
signIn.setVisibility(View.VISIBLE);
plsWait.setVisibility(View.VISIBLE);
}
});
findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = editTextC.getText().toString().trim();
if (code.isEmpty() || code.length() < 6)
{
editTextC.setError("Enter code...");
editTextC.requestFocus();
return;
}
verifyCode(code);
}
});
}
private void sendVerificationCode(String number) {
progressBar.setVisibility(View.VISIBLE);
PhoneAuthProvider.getInstance().verifyPhoneNumber(
number, //Phone number to verify
60, //timeout duration
TimeUnit.SECONDS, //unit of timeout
TaskExecutors.MAIN_THREAD, //Activity for callback binding
mCallBack //OnVerificationStateChangedCallbacks
);
}
private void verifyCode(String code) {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
signInWithCredential(credential);
}
private void signInWithCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
progressBar.setVisibility(View.GONE);
} else {
}
}
});
}
private PhoneAuthProvider.OnVerificationStateChangedCallbacks
mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken)
{
super.onCodeSent(s, forceResendingToken);
verificationId = s;
}
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential)
{
String code = phoneAuthCredential.getSmsCode();
if (code != null) {
editTextC.setText(code);
verifyCode(code);
Intent intent = new Intent(PelephoneActivity.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
@Override
public void onVerificationFailed(FirebaseException e) {
Toast.makeText(PelephoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
};
}
И ошибка:
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.blue, PID: 6726
java.lang.IllegalArgumentException: Given String is empty or null
at com.google.android.gms.common.internal.zzbo.zzcF(Unknown Source:11)
at com.google.firebase.auth.PhoneAuthCredential.<init>(Unknown Source:3)
at com.google.firebase.auth.PhoneAuthProvider.getCredential(Unknown Source:2)
at com.example.android.bluesky.SetupAccount.PelephoneActivity.verifyCode(PelephoneActivity.java:176)
at com.example.android.bluesky.SetupAccount.PelephoneActivity.access$900(PelephoneActivity.java:52)
at com.example.android.bluesky.SetupAccount.PelephoneActivity$2.onClick(PelephoneActivity.java:150)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Структура базы данных: 
Есть идеи как это решить?