После выхода из Firebase phoneAuth, как повторно войти в предыдущую учетную запись?

#android #firebase-authentication

#Android #firebase-аутентификация

Вопрос:

У меня есть проект, использующий проверку firebase phoneAuth в качестве метода входа. Но после выхода из системы я не могу повторно войти в предыдущую учетную запись. Для этого требуется новая учетная запись. Но проверка электронной почты работает при повторном входе. Я проверил документ и ответил на этой странице, но, похоже, у меня нет решения проблемы. Возможно ли повторно войти в предыдущую учетную запись firebase phoneAuth?

 verifyBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String phoneNumber = loginPhoneET.getText().toString();
                String phone = " "   picker.getSelectedCountryCode()   phoneNumber;


                if(!Patterns.PHONE.matcher(phoneNumber).matches())
                {
                    loginPhoneET.setError("Invalid phone number");
                    loginPhoneET.setFocusable(true);
                    Toast.makeText(LoginActivity.this, "Please enter a valid phone number", Toast.LENGTH_LONG).show();
                }
                else
                {
                    loadingBar.setTitle("Sending verification code");
                    loadingBar.setMessage("Please wait...");
                    loadingBar.setCanceledOnTouchOutside(false);
                    loadingBar.show();

                    PhoneAuthProvider.getInstance().verifyPhoneNumber(
                            phone,        // Phone number to verify
                            60,                 // Timeout duration
                            TimeUnit.SECONDS,   // Unit of timeout
                            TaskExecutors.MAIN_THREAD,
                            //AdminLoginActivity.this,               // Activity (for callback binding)
                            callbacks);      // OnVerificationStateChangedCallbacks
                }

            }
        });
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loginPhoneET.setVisibility(View.INVISIBLE);
                verifyBtn.setVisibility(View.INVISIBLE);


                String verificationCode = verificationET.getText().toString();
                if(TextUtils.isEmpty(verificationCode))
                {
                    Toast.makeText(LoginActivity.this, "Please enter the verification code", Toast.LENGTH_SHORT).show();
                }

                else
                {
                    loadingBar.setTitle("Verifying code");
                    loadingBar.setMessage("Please wait...");
                    loadingBar.setCanceledOnTouchOutside(false);
                    loadingBar.show();

                    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, verificationCode);
                    signInWithPhoneAuthCredential(credential);
                }
            }
        });
        callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential)
            {
                String code = phoneAuthCredential.getSmsCode();
                if (code!=null)
                {

                    verificationET.setText(code);
                    signInWithPhoneAuthCredential(phoneAuthCredential);
                }

            }

            @Override
            public void onVerificationFailed(@NonNull FirebaseException e)
            {
                loadingBar.dismiss();
                Toast.makeText(LoginActivity.this, "Invalid phone number. Please enter a correct phone number", Toast.LENGTH_SHORT).show();


                verificationET.setVisibility(View.GONE);
                loginBtn.setVisibility(View.GONE);
                loginPhoneET.setVisibility(View.VISIBLE);
                verifyBtn.setVisibility(View.VISIBLE);
            }

            @Override
            public void onCodeSent(@NonNull String verificationId,
                                   @NonNull PhoneAuthProvider.ForceResendingToken token) {

                // Save verification ID and resending token so we can use them later
                mVerificationId = verificationId;
                mResendToken = token;
                loadingBar.dismiss();

                Toast.makeText(LoginActivity.this, "Verification code has been sent to your phone.", Toast.LENGTH_SHORT).show();

                verificationET.setVisibility(View.VISIBLE);
                loginBtn.setVisibility(View.VISIBLE);
                loginPhoneET.setVisibility(View.GONE);
                verifyBtn.setVisibility(View.GONE);

            }
        };


    }
    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task)
                    {
                        if (task.isSuccessful()) {
                            final FirebaseUser user = mAuth.getCurrentUser();
                            final String uid = user.getUid();
                            final String phone = user.getPhoneNumber();

                            HashMap<String, Object> hashMap = new HashMap<>();
                            hashMap.put("userId", uid);
                            hashMap.put("phone", phone);


                            UsersDataRef.child(uid).setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    loadingBar.dismiss();
                                    Toast.makeText(LoginActivity.this, "Login success !", Toast.LENGTH_SHORT).show();
                                    AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                                    SendUserToPhotoActivity(phone, uid);
                                }
                            });
                        } else {
                            String message = task.getException().toString();
                            Toast.makeText(LoginActivity.this, "Error:"   message, Toast.LENGTH_SHORT).show();
                            loadingBar.dismiss();

                        }

                    }
                });
  

Комментарии:

1. «Я не могу повторно войти в предыдущую учетную запись» Что это значит? Вы получаете сообщение об ошибке в одном из вызовов API?

2. Я не получаю никаких ошибок.

3. я имею в виду, что после выхода из приложения я не могу войти в свою ранее созданную учетную запись. Это означает, что все мои предыдущие действия теряются и запускается новая учетная запись..

4. Хммм …. это неожиданно. Когда вы звоните verifyPhoneNumber с того же номера, это должно привести к созданию той же учетной записи. Я не вижу, где в вашем коде может быть что-то не так, поэтому надеюсь, что кто-нибудь еще это заметит.