Аутентификация Firebase createUserWithEmailAndPassword не выполняется на физических устройствах с переменной для электронной почты

1

При использовании createUserWithEmailAndPassword есть две проблемы,

  1. Работает на эмуляторе, но не в режиме отладки на физическом устройстве

  2. Чтобы заставить его работать на физическом устройстве, я могу жестко закодировать строку для части электронной почты, даже если она сохранена в переменной. Он ломается при получении письма от EditText, но я использовал Log.d(), чтобы подтвердить, что строка точно такая же, прежде чем вызывать метод создания.

Это работает

    final String sEmail = "[email protected]";
            final String sPassword = password.getText().toString();
            final String sDisplayName = displayName.getText().toString();
            Log.d("Credentials:Email", sEmail);
            Log.d("Credentials:Password", sPassword);
            mAuth.createUserWithEmailAndPassword(sEmail,sPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()){
                        FirebaseUser user = mAuth.getCurrentUser();
                        /*UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                .setDisplayName(sDisplayName).build();
                        user.updateProfile(profileUpdates);
                        mAuth.signOut();*/
                        Intent intent = new Intent(MainActivity.this,UserLogin.class);
                        startActivity(intent);

                    }else{
                        Toast creationFailed = Toast.makeText(getApplicationContext(),"Creation Failed", Toast.LENGTH_SHORT);
                        creationFailed.show();
                    }

                }
            });

Это не так.

    final String sEmail = email.getText().toString();
            final String sPassword = password.getText().toString();
            final String sDisplayName = displayName.getText().toString();
            Log.d("Credentials:Email", sEmail);
            Log.d("Credentials:Password", sPassword);
            mAuth.createUserWithEmailAndPassword(sEmail,sPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()){
                        FirebaseUser user = mAuth.getCurrentUser();
                        /*UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                .setDisplayName(sDisplayName).build();
                        user.updateProfile(profileUpdates);
                        mAuth.signOut();*/
                        Intent intent = new Intent(MainActivity.this,UserLogin.class);
                        startActivity(intent);

                    }else{
                        Toast creationFailed = Toast.makeText(getApplicationContext(),"Creation Failed", Toast.LENGTH_SHORT);
                        creationFailed.show();
                    }

                }
            });

Вот сообщение об ошибке

    2019-01-14 13:44:48.298 3217-16541/? E/Volley: [1455] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?alt=proto&key=AIzaSyCTfahJaTfOSAOdY7_pIN27-BGQgFlORnE

Обратите внимание, что по какой-то причине второй, который не работает, будет работать на эмулируемом устройстве. Я ожидаю, что второй, чтобы создать учетную запись, но это просто не удается.

Теги:
firebase
firebase-authentication

1 ответ

0
Лучший ответ

Я предположил, что ваш ввод не тип электронной почты. Пожалуйста, имейте в виду, что для этого нужен тип электронной почты.

Сделайте метод проверки электронной почты действительным

   //Check email valid
    boolean isEmailValid(CharSequence email) {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }

Тогда обратитесь к своей части.

        //Check email valid
        if (!isEmailValid(email.getText().toString())) {
            email.setError("Not email type");
            email.requestFocus();
            return;
        }

Насчет твоего тоста, может быть, будет лучше, если ты поставишь вот так. Итак, вы можете знать, с какой ошибкой вы столкнулись.

else {             
      Toast.makeText(getApplicationContext(), "Fail: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
      }
  • 0
    Спасибо большое за вашу помощь. Я очень новичок в Android и Firebase, и ваш короткий ответ дал мне много информации, спасибо!
  • 0
    @ JeremyO'Handley Не за что. Не стесняйтесь задавать вопросы в следующий раз. Добро пожаловать сюда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню