Здесь приведен полный код
public class MainActivity extends AppCompatActivity {
Button signUp;
EditText userName,phone,password;
String verification_Code;
FirebaseAuth Auth;
DatabaseReference reference;
FirebaseDatabase firebaseDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
userName= findViewById(R.id.User);
phone= findViewById(R.id.phone);
password= findViewById(R.id.pass);
signUp=findViewById(R.id.Login);
Auth= FirebaseAuth.getInstance();
firebaseDatabase= FirebaseDatabase.getInstance();
signUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
send_sms();
}
});
}
public void send_sms()
{
String p = phone.getText().toString();
if(p.length()<=10)
{
Toast.makeText(getApplicationContext(),"Please enter the correct phone to receive the OTP",Toast.LENGTH_SHORT).show();
}
else if (p.isEmpty()) {
Toast.makeText(this, "Please enter a valid phone number", Toast.LENGTH_SHORT).show();
}
else{
startActivity(new Intent(this,otp_verify.class));
}
PhoneAuthProvider.getInstance().verifyPhoneNumber(p,60, TimeUnit.SECONDS,this,mcallback);
}
PhoneAuthProvider.OnVerificationStateChangedCallbacks mcallback= new PhoneAuthProvider.OnVerificationStateChangedCallbacks()
{
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential)
{
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e)
{
}
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken)
{
super.onCodeSent(s, forceResendingToken);
verification_Code=s;
Toast.makeText(getApplicationContext(),"OTP has been send successfully",Toast.LENGTH_SHORT).show();
}
};
public void verifyNumber(EditText a)
{
String b= a.getText().toString();
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verification_Code, b);
SignIn(credential);
}
public void SignIn(PhoneAuthCredential credential)
{
Auth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task)
{
if(task.isSuccessful()){
reference= firebaseDatabase.getReference("Users").child("id");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user= dataSnapshot.child(phone.getText().toString()).getValue(User.class);
if(user.getPhone().equals(phone.getText().toString())){
Toast.makeText(getApplicationContext(),"You've Login Successfully",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,userHome.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
else{
FirebaseUser firebaseUser= Auth.getCurrentUser();
assert firebaseUser != null;
String userid = firebaseUser.getUid();
String name= userName.getText().toString();
String phon=phone.getText().toString();
reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
HashMap<String, String> hashMap= new HashMap<>();
hashMap.put("phoneNumber",phon);
hashMap.put("username",name);
hashMap.put("id",userid);
hashMap.put("imageURL","default");
reference.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(getApplicationContext(),"You've Sign-Up Successfully",Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this,userHome.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}else{
Toast.makeText(MainActivity.this, "Please try again after sometime", Toast.LENGTH_SHORT).show();
}
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}else{
Toast.makeText(MainActivity.this, "You have entered an incorrect OTP", Toast.LENGTH_SHORT).show();
}
}
});
}
}
Ниже приведен код смежного класса из другого класса.Я создал этот класс, чтобы я мог открыть новое действие и отправить вызванный метод из другого класса, чтобы передать значение
public class otp_verify extends MainActivity {
EditText veri;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.otp_verify);
veri= findViewById(R.id.verifyCode);
DisplayMetrics dm= new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels;
int width = dm.widthPixels;
getWindow().setLayout((int)(width*.8 ),(int)(height* .6 ));
findViewById(R.id.otpProceed).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(veri.getText().toString().isEmpty()){
Toast.makeText(getApplicationContext(),"Please enter the OTP to proceed", Toast.LENGTH_SHORT).show();
}
else{
new MainActivity().verifyNumber(veri);
}
}
});
}
}
LOGCAT E / AndroidRuntime:ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.Aman.demoChat, PID: 12004 java.lang.IllegalArgumentException: невозможно создать PhoneAuthCredential без проверкиProof, sessionInfo, временного подтверждения или идентификатора регистрации.на com.google.android.gms.common.internal.Preconditions.checkArgument (неизвестный источник: 35) на com.google.firebase.auth.PhoneAuthCredential. (com.google.firebase: firebase-auth @@ 19.0.0: 7) на com.google.firebase.auth.PhoneAuthProvider.getCredential (com.google.firebase: firebase-auth @@ 19.0.0: 33) на com.Aman.demoChat.MainActivity.verifyNumber (MainActivity.java:120) на com.Aman.demoChat.otp_verify $ 1.onClick (otp_verify.java:42) на android.view.View.performClick (View.java:6669) на android.view.View.performClickInternal (View.java:6638) на android.view.View.access $ 3100 (View.java:789) на android.view.View $ PerformClick.run (View.java:26145) на android.os.Handler.handleCallback (Handler.java:873) на android.os.Handler.dispatchMessage (Handler.java:99) в android.os.Looper.loop (Looper.java:193) в android.app.ActivityThread.main (ActivityThread.java:6898) в java.lang.reflect.Method.invoke (Собственный метод) на com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:537) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) W / OPDiagnose: getService: OPDiagnoseService NULL D / OSTracker: Событие ОС: сбой I / Процесс: отправка сигнала.PID: 12004 SIG: 9 Процесс 12004 завершен.