Android: Cómo iniciar sesión un usuario con su número de teléfono

Mayur Sadhu:

Estoy creando una aplicación con el lugar donde quiero ya firmados por los usuarios serán redirigidos a su perfil si su número de teléfono está registrado en la aplicación, pero si es un usuario nuevo entonces él será redirigido a la página de bienvenida. El problema es que soy capaz de obtener el código de verificación del número de teléfono, pero siempre está redirigiendo a la página de bienvenida, independientemente de si se trata de un usuario existente o un nuevo usuario. Con mucho, he implementado autenticación por teléfono Firebase, y

    private void verifyCode(String code) {

        PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.getCredential(verificationId, code);
        signInWithCredentials(phoneAuthCredential);

    }

    private void signInWithCredentials(PhoneAuthCredential phoneAuthCredential) {

        mAuth.signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {


                final String num = getIntent().getStringExtra("phoneNumber");
                final Query query = FirebaseDatabase.getInstance().getReference("users").orderByChild("birthday").equalTo(num);

                if (task.isSuccessful()) {

                    if (num.equals(query.toString())) {

                        Log.i("Method", "Inside if block");
                        Log.i("value", num + query.toString());
                        Intent intent = new Intent(VerifyPhoneActivity.this, WelcomeActivity.class);

                        startActivity(intent);

                    } else {

                        Log.i("Method", "Inside if block2");
                        Log.i("value", num + query.toString());



                    Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                    startActivity(intent);
                }


                } else {

                    Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();

                }
            }
        });

    }

Estoy tomando sólo el número de teléfono del usuario para iniciar sesión / inscribirse, y no hay botón separado para inicio de sesión y registrarse. Se debe trabajar de tal manera que, una vez que el OTP enviado por el auth Firebase ha sido verificada y si el número de teléfono ya está presente en la base de datos, se debe directamente fo página de perfil del usuario en lugar de la pantalla de bienvenida, sin embargo, si el número de teléfono es nuevo que debe ir a la página de bienvenida en lugar de la página de perfil de usuario. El reto que estoy enfrentando es que no soy capaz de comprobar si el número introducido ya está presente en la base de datos en la tabla de usuario (He creado una tabla de usuario independiente para almacenar los datos del usuario cuando se registre en el primera vez).

Nothir:

Por lo que entendí que es capaz de registrar a los usuarios pero no eres capaz de redirigir a los usuarios no registrados a la pantalla de inicio de sesión / registro, si ese es el caso, entonces se puede tratar de uso

FirebaseAuth.getInstance().currentUser

en el método vista en crear en su página de bienvenida / home debe ser algo como esto

override fun onCreate(savedInstanceState: Bundle?) {

  if (FirebaseAuth.getInstance().currentUser == null) {
     startActivity(Intent(applicationContext, RegistrationActivity::class.java))
     finish()
     return
  } 

  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)
  // do your other stuff

}

este código se escribe en Kotlin que no debería ser tan diferente en java. Espero eso ayude.

ACTUALIZAR------

usted tiene algunos errores con su código, intente esto

private void verifyCode(String code) {

    PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.getCredential(verificationId, code);

    FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {

                final String num = getIntent().getStringExtra("phoneNumber");
                FirebaseDatabase.getInstance().getReference("users").orderByChild("phoneNumber").equalTo(num).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(intent);
                        } else {
                            FirebaseDatabase.getInstance().getReference("users").push().child("phoneNumber").setValue(num).addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    Intent intent = new Intent(VerifyPhoneActivity.this, WelcomeActivity.class);

                                    startActivity(intent);

                                }
                            });
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            } else {
                Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    });
}

En primer lugar, usted tiene que entrar en el usuario con el detalle de teléfono a continuación, comprobar si tiene cualquier usuario registrado con ese número de teléfono si lo hace entonces eso significa que este usuario ya ha entrado en la aplicación, pero si no lo tiene cualquiera información del usuario con ese número de teléfono a continuación, crear su información y dirigirlo a la pantalla de bienvenida después de la creación de su información, por lo que si este usuario se vuelve otra vez va a comprobar si tenemos un registro de usuario con ese número de teléfono (que hacemos) así que esta vez va a ser dirigida a la pantalla de perfil

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=363500&siteId=1
Recomendado
Clasificación