Как связать новую информацию пользователя с PhoneAuthCredential - PullRequest
0 голосов
/ 24 февраля 2020

Я использую PhoneAuthCredential для входа в систему, и все работает нормально, кроме одной вещи. как вы видите в OtpActivity, я проверяю, существует ли пользователь, может ли он go перейти в Home Activity, а если нет, то он будет перенаправлен в Register Activity, и проблема в том, что когда пользователь пытается зарегистрироваться, он регистрируется как новый пользователь с новый токен UID без его PhoneAuthCredential, и я хочу, чтобы, когда пользователь регистрировался, я связывал его информацию с его PhoneAuthCredential, чтобы дать мне одного пользователя, а не двух пользователей, как я получаю сейчас.

public class OtpActivity extends AppCompatActivity {

    private static final String TAG = "EmailPassword";

    private String verificationid;
    private FirebaseAuth mAuth;
    private ProgressBar progressBar;
    private EditText editText;
    DatabaseReference users;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_otp);

        mAuth = FirebaseAuth.getInstance();

        progressBar = findViewById(R.id.progressbar);
        editText = findViewById(R.id.editTextCode);

        String phoneNumber = getIntent().getStringExtra("phonenumber");
        sendVerificationCode(phoneNumber);

        // save phone number
        SharedPreferences prefs = getApplicationContext().getSharedPreferences("USER_PREF",
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("phoneNumber", phoneNumber);
        editor.apply();


        findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String code = editText.getText().toString().trim();

                if ((code.isEmpty() || code.length() < 6)){

                    editText.setError("Enter code...");
                    editText.requestFocus();
                    return;
                }
                verifyCode(code);

            }
        });
    }

    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()) {
                            users = FirebaseDatabase.getInstance().getReference( Common.user_rider_tbl );
                            if (users != null) {
                                users.addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                        if (dataSnapshot.exists()) {
                                            Intent intent = new Intent(OtpActivity.this, Home.class);
                                            startActivity(intent);
                                            finish();

                                        } else {
                                            Intent gotoUserInfo = new Intent(OtpActivity.this, Register.class);
                                            startActivity(gotoUserInfo);
                                            finish();
                                        }
                                    }

                                    @Override
                                    public void onCancelled(@NonNull DatabaseError databaseError) {
                                    }
                                });
                            } else {

                            }

                        } else {
                            Toast.makeText(OtpActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                            progressBar.setVisibility(View.GONE);
                        }
                    }

                });
    }

    private void sendVerificationCode(String number){

        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                number,
                60,
                TimeUnit.SECONDS,
                TaskExecutors.MAIN_THREAD,
                mCallBack
        );
    }

    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){
                progressBar.setVisibility(View.VISIBLE);
                verifyCode(code);
            }
        }

        @Override
        public void onVerificationFailed(FirebaseException e) {
            Toast.makeText(OtpActivity.this, e.getMessage(),Toast.LENGTH_LONG).show();

        }
    };
}

public class Register extends AppCompatActivity implements View.OnClickListener {


    private static final String TAG = "EmailPassword";
    private EditText mFirstName;
    private EditText mLastName;
    private EditText mEmail;
    private EditText mPassword;
    private EditText mPhone;
    private EditText mCity;


    private ImageView back_btn;


    private FirebaseAuth mAuth;
    private DatabaseReference users;
    private FirebaseDatabase firebaseDatabase;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        back_btn = findViewById( R.id.back_btn );
        back_btn.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(Register.this, Home.class));
                finish();

            }
        } );



        mFirstName = findViewById(R.id.mFirstName);
        mLastName = findViewById(R.id.mLastName);
        mEmail =  findViewById(R.id.mEmail);
        mPassword = findViewById(R.id.mPassword);
        mPhone = findViewById(R.id.mPhone);
        mCity = findViewById(R.id.mCity);


        findViewById(R.id.btn_register).setOnClickListener(this);


        mAuth = FirebaseAuth.getInstance();

    }

    private void goToMainActivity() {
        Intent intent = new Intent(Register.this, Home.class);
        startActivity(intent);
        finish();
    }

    private void createAccount( EditText  email, EditText password) {
        Log.d(TAG, "createAccount:" + this.mEmail);
        if (!validateForm()) {
            return;
        }

        // [START create_user_with_email]
        mAuth.createUserWithEmailAndPassword(this.mEmail.getText().toString(), this.mPassword.getText().toString())
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            User user = new User();
                            user.setFirstName(mFirstName.getText().toString());
                            user.setLastName(mLastName.getText().toString());
                            user.setEmail(Register.this.mEmail.getText().toString());
                            user.setPassword(Register.this.mPassword.getText().toString());
                            user.setPhone(mPhone.getText().toString());
                            user.setCity(mCity.getText().toString());



                            users = FirebaseDatabase.getInstance().getReference(Common.user_rider_tbl);

                            users.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                    .setValue(user)
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void aVoid) {
                                            Toast.makeText(Register.this, "Registered successfully", Toast.LENGTH_SHORT).show();
                                            goToMainActivity();
                                        }
                                    });
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Register.this, "Registered failed", Toast.LENGTH_SHORT).show();

                    }
                });
    }

    private boolean validateForm() {
        boolean valid = true;

        String  firstName = mFirstName.getText().toString();
        if (TextUtils.isEmpty(firstName)) {
            mFirstName.setError("Required.");
            valid = false;
        } else {
            mFirstName.setError(null);
        }

        String  lastName = mLastName.getText().toString();
        if (TextUtils.isEmpty(lastName)) {
            mLastName.setError("Required.");
            valid = false;
        } else {
            mLastName.setError(null);
        }

        String  email = mEmail.getText().toString();
        if (TextUtils.isEmpty(email)) {
            mEmail.setError("Required.");
            valid = false;
        } else {
            mEmail.setError(null);
        }

        String  password = mPassword.getText().toString();
        if (TextUtils.isEmpty(password)) {
            mPassword.setError("Required.");
            valid = false;
        } else {
            mPassword.setError(null);
        }

        String  phone = mPhone.getText().toString();
        if (TextUtils.isEmpty(phone)) {
            mPhone.setError("Required.");
            valid = false;
        } else {
            mPhone.setError(null);
        }
        String  city = mCity.getText().toString();
        if (TextUtils.isEmpty(city)) {
            mCity.setError("Required.");
            valid = false;
        } else {
            mCity.setError(null);
        }

        return valid;
    }

    // [END create_user_with_email]


    @Override
    public void onClick(View v) {
        int i = v.getId();
        if (i == R.id.btn_register) {
            createAccount( mEmail, mPassword );
        }

    }

    @Override
    public void onBackPressed() {

        Intent intent = new Intent( Register.this, StartActivity.class );
        startActivity( intent );
        finish();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...