While i am running my program i am seeing no error.Currently i am trying to use phone authentication of firebase for my app.when I try to save data onto firsetore it uploads the data but does not set the required UId.I want to first check if the user is already logged in if he is than he will be directed to details.activity and if not than he will have to register in register.activity.I want to set UID in place of UserID
RegisterActivity.java
public class RegisterActivity extends AppCompatActivity {
FirebaseAuth firebaseAuth;
FirebaseFirestore firestore;
EditText phoneNumber;
EditText codeEnter;
Button NextButton;
ProgressBar progressBar;
TextView State;
CountryCodePicker codePicker;
String TAG ="MyTag";
String verificationID;
PhoneAuthProvider.ForceResendingToken Token;
Boolean verifiacationInProgress=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
firebaseAuth= FirebaseAuth.getInstance();
firestore=FirebaseFirestore.getInstance();
phoneNumber= findViewById(R.id.phone);
codeEnter=findViewById(R.id.codeEnter);
NextButton=findViewById(R.id.nextButton);
progressBar=findViewById(R.id.progressBar);
State=findViewById(R.id.state);
codePicker=findViewById(R.id.ccp);
NextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!verifiacationInProgress){
if (!phoneNumber.getText().toString().isEmpty() && phoneNumber.getText().toString().length() == 10) {
String phnNumber = "+" + codePicker.getSelectedCountryCode() + phoneNumber.getText().toString();
Log.d(TAG, "Phone Number is " + phnNumber);
progressBar.setVisibility(View.VISIBLE);
State.setText("SENDING OTP");
State.setVisibility(View.VISIBLE);
requestOTP(phnNumber);
} else {
phoneNumber.setError("Phone number is not valid");
}
}
else {
String UserOTP=codeEnter.getText().toString();
if (!UserOTP.isEmpty()&&UserOTP.length()==6){
PhoneAuthCredential credential=PhoneAuthProvider.getCredential(verificationID,UserOTP);
VerifyAuth(credential);
}
else {
codeEnter.setError("Invalid OTP");
}
}
}
});
}
@Override
protected void onStart() {
super.onStart();
if(firebaseAuth!=null){
progressBar.setVisibility(View.VISIBLE);
State.setText("Checking");
State.setVisibility(View.VISIBLE);
CheckUserProfile();
}
}
private void VerifyAuth(PhoneAuthCredential credential) {
firebaseAuth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
CheckUserProfile();
}
else {
Toast.makeText(RegisterActivity.this,"Login Failed",Toast.LENGTH_SHORT).show();
}
}
});
}
private void CheckUserProfile(){
DocumentReference documentReference=firestore.collection("users")
.document(firebaseAuth.getCurrentUser().getUid());
documentReference.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if(documentSnapshot.exists()){
Intent intent=new Intent(RegisterActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
else {
Intent intent = new Intent(RegisterActivity.this,AddDetails.class);
startActivity(intent);
finish();
}
}
});
}
private void requestOTP(String phnNumber) {
PhoneAuthProvider.getInstance().verifyPhoneNumber(phnNumber, 60L, TimeUnit.SECONDS, RegisterActivity.this,
new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
verificationID = s;
Token= forceResendingToken;
progressBar.setVisibility(View.INVISIBLE);
State.setVisibility(View.INVISIBLE);
codeEnter.setVisibility(View.VISIBLE);
NextButton.setText("Verify");
NextButton.setEnabled(true);
verifiacationInProgress=true;
}
@Override
public void onCodeAutoRetrievalTimeOut(@NonNull String s) {
super.onCodeAutoRetrievalTimeOut(s);
}
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
Toast.makeText(RegisterActivity.this,"Cannot create account"+e.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
}
AddDetails.java
public class AddDetails extends AppCompatActivity {
private Button button;
private EditText fname,lname,emailid;
FirebaseAuth firebaseAuth;
FirebaseFirestore firebaseFirestore;
String UserID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_details);
button=findViewById(R.id.save_data);
fname=findViewById(R.id.FirstName);
lname=findViewById(R.id.LastName);
emailid=findViewById(R.id.email_address);
firebaseAuth=FirebaseAuth.getInstance();
firebaseFirestore=FirebaseFirestore.getInstance();
UserID=firebaseAuth.getCurrentUser().getUid();
final DocumentReference documentReference=firebaseFirestore.collection("users").document("UserID");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!fname.getText().toString().isEmpty()&&!lname.getText().toString().
isEmpty()&&!emailid.getText().toString().isEmpty()){
String FirstName=fname.getText().toString();
String LastName=lname.getText().toString();
String EmailId=emailid.getText().toString();
Map<String,Object> user=new HashMap<>();
user.put("first",FirstName);
user.put("last",LastName);
user.put("EmailID",EmailId);
documentReference.set(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Intent intent=new Intent(AddDetails.this,MainActivity.class);
startActivity(intent);
finish();
Toast.makeText(AddDetails.this,"Data Uploaded Successfully ",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(AddDetails.this,"Data Upload Failed ",Toast.LENGTH_SHORT).show();
}
}
});
}
else {
Toast.makeText(AddDetails.this,"All Fields are Required",Toast.LENGTH_SHORT).show();
}
}
});
}
}
activity_register.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#4D8DF6"
tools:context=".RegisterActivity">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OTP AUTH"
android:textColor="#FFFFFE"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.13" />
<com.rilixtech.widget.countrycodepicker.CountryCodePicker
android:id="@+id/ccp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.26999998" />
<EditText
android:id="@+id/phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:hint="Mobile Number"
android:inputType="phone"
android:textColor="#F2F1F3"
android:textColorHint="#FFFEFE"
android:textSize="19sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ccp"
app:layout_constraintVertical_bias="0.0">
</EditText>
<Button
android:id="@+id/nextButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:background="#2F57EA"
android:text="NEXT"
android:textColor="#FFFFFF"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/state"
app:layout_constraintVertical_bias="0.19" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/phone" />
<TextView
android:id="@+id/state"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:text="Sending OTP.."
android:textColor="#FFEB3B"
android:textSize="18sp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/progressBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/progressBar"
app:layout_constraintTop_toTopOf="@+id/progressBar" />
<EditText
android:id="@+id/codeEnter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:ems="10"
android:hint="Enter OTP"
android:inputType="number"
android:textColor="#FFFFFF"
android:textColorHighlight="#E8E9EE"
android:textColorHint="#DEDFE6"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/phone"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/resendOtpBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resend"
android:textColor="#FFEB3B"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/codeEnter"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.92"
app:layout_constraintStart_toEndOf="@+id/progressBar"
app:layout_constraintTop_toTopOf="@+id/codeEnter" />
</androidx.constraintlayout.widget.ConstraintLayout>
activity_add_details
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AddDetails">
<EditText
android:id="@+id/FirstName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="96dp"
android:layout_marginTop="78dp"
android:ems="10"
android:hint="First Name"
android:inputType="textPersonName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/LastName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="96dp"
android:layout_marginTop="61dp"
android:ems="10"
android:hint="Last Name"
android:inputType="textPersonName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/FirstName" />
<EditText
android:id="@+id/email_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="96dp"
android:layout_marginTop="74dp"
android:ems="10"
android:hint="Email Address"
android:inputType="textPersonName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/LastName" />
<Button
android:id="@+id/save_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="110dp"
android:text="Save Data"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/email_address" />
</androidx.constraintlayout.widget.ConstraintLayout>