title: Android Phone Number Verification in Firebase
body: <p>I'm trying to create a login screen which will use Phone Number Authentication in Firebase. I wrote a code;</p>
  
  <pre><code>package com.example.logindeneme;
  
  import android.app.ProgressDialog;
  import android.content.Intent;
  import android.support.annotation.NonNull;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.text.TextUtils;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.Toast;
  
  import com.google.android.gms.tasks.OnCompleteListener;
  import com.google.android.gms.tasks.Task;
  import com.google.firebase.FirebaseException;
  import com.google.firebase.auth.AuthResult;
  import com.google.firebase.auth.FirebaseAuth;
  import com.google.firebase.auth.PhoneAuthCredential;
  import com.google.firebase.auth.PhoneAuthProvider;
  
  import java.util.concurrent.TimeUnit;
  
  public class PhoneLoginActivity extends AppCompatActivity {
  
      private Button SendVerificationButton, VerifyButton;
      private EditText InputPhoneNumber, InputVerificationCode;
  
      private PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks;
      private FirebaseAuth mAuth;
  
      private ProgressDialog loadingBar;
  
      private String mVerificationId;
      private PhoneAuthProvider.ForceResendingToken mResendToken;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_phone_login);
  
          mAuth = FirebaseAuth.getInstance();;
  
          SendVerificationButton = (Button) findViewById(R.id.send_ver_code_button);
          VerifyButton = (Button)findViewById(R.id.verify_button);
          InputPhoneNumber = (EditText) findViewById(R.id.phone_number_input);
          InputVerificationCode = (EditText) findViewById(R.id.verification_code_input);
          loadingBar = new ProgressDialog(this);
  
  
          SendVerificationButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
  
  
                  String phoneNumber = InputPhoneNumber.getText().toString();
                  if(TextUtils.isEmpty(phoneNumber)){
                      Toast.makeText(PhoneLoginActivity.this, "Please enter your phone number first...", Toast.LENGTH_SHORT).show();
                  }
                  else{
                      loadingBar.setTitle("Phone Verification");
                      loadingBar.setMessage("please wait, while we are authenticating your phone...");
                      loadingBar.setCanceledOnTouchOutside(false);
                      loadingBar.show();
                      PhoneAuthProvider.getInstance().verifyPhoneNumber(
                              phoneNumber,        // Phone number to verify
                              60,                 // Timeout duration
                              TimeUnit.SECONDS,   // Unit of timeout
                              PhoneLoginActivity.this,               // Activity (for callback binding)
                              callbacks);        // OnVerificationStateChangedCallbacks
                  }
              }
          });
  
          VerifyButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  SendVerificationButton.setVisibility(View.INVISIBLE);
                  InputPhoneNumber.setVisibility(View.INVISIBLE);
  
                  String verificationCode = InputVerificationCode.getText().toString();
  
                  if(TextUtils.isEmpty(verificationCode)){
                      Toast.makeText(PhoneLoginActivity.this, "Please write verification code first...", Toast.LENGTH_SHORT).show();
                  }
                  else{
                      loadingBar.setTitle("Verification Code");
                      loadingBar.setMessage("please wait, while we are verifying verification code...");
                      loadingBar.setCanceledOnTouchOutside(false);
                      loadingBar.show();
  
                      PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, verificationCode);
                      signInWithPhoneAuthCredential(credential);
                  }
              }
          });
  
          callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
              @Override
              public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                  signInWithPhoneAuthCredential(phoneAuthCredential);
              }
  
              @Override
              public void onVerificationFailed(FirebaseException e) {
                  loadingBar.dismiss();
                  Toast.makeText(PhoneLoginActivity.this, "Invalid Phone Number, Please enter correct phone number with your country code...", Toast.LENGTH_SHORT).show();
  
                  SendVerificationButton.setVisibility(View.VISIBLE);
                  InputPhoneNumber.setVisibility(View.VISIBLE);
  
                  VerifyButton.setVisibility(View.INVISIBLE);
                  InputVerificationCode.setVisibility(View.INVISIBLE);
              }
  
              public void onCodeSent(String verificationId,
                                     PhoneAuthProvider.ForceResendingToken token) {
  
                  // Save verification ID and resending token so we can use them later
                  mVerificationId = verificationId;
                  mResendToken = token;
  
                  loadingBar.dismiss();
                  Toast.makeText(PhoneLoginActivity.this, "Code has been sent, please check and verify.", Toast.LENGTH_SHORT).show();
                  SendVerificationButton.setVisibility(View.INVISIBLE);
                  InputPhoneNumber.setVisibility(View.INVISIBLE);
  
                  VerifyButton.setVisibility(View.VISIBLE);
                  InputVerificationCode.setVisibility(View.VISIBLE);
              }
          };
      }
  
      private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
          mAuth.signInWithCredential(credential)
                  .addOnCompleteListener(this, new OnCompleteListener&lt;AuthResult&gt;() {
                      @Override
                      public void onComplete(@NonNull Task&lt;AuthResult&gt; task) {
                          if (task.isSuccessful()) {
                              loadingBar.dismiss();
                              Toast.makeText(PhoneLoginActivity.this, "Congratulations, you're logged in successfully...", Toast.LENGTH_SHORT).show();
                              SendUserToMainActivity();
                          }
                          else {
                              String message = task.getException().toString();
                              Toast.makeText(PhoneLoginActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
  
                          }
  
                      }
                  });
      }
  
      private void SendUserToMainActivity() {
          Intent mainIntent = new Intent(PhoneLoginActivity.this,MainActivity.class);
          startActivity(mainIntent);
          finish();
      }
  }
  
  </code></pre>
  
  <p>But when I try to enter my phone number and want a code, always says "Invalid phone number". However, if I enter my number and random verify code in Test Phone Numbers in Firebase, and if I enter in my app; it works.</p>
  
  <p>My country uses "+90" phone code. So I tried +9053XXXXXXXX, +90 53X XXX XX XX, +90-53X-XXX-XX-XX and etc. but never works.</p>
  
  <p>Where is my fault? Can you fix it ?</p>