无法使用Firebase动态进行电话号码身份验证

时间:2019-05-31 05:33:59

标签: java android firebase firebase-authentication

我无法对android进行电话身份验证。
但是我可以通过设置验证码进行手动身份验证。
我想动态验证任何国家/地区的电话身份验证。

我已经尝试使用国家/地区代码给定,但是我只得到显示的结果

  

无效的电话号码

这是我的代码

public class PhoneLogActivity extends AppCompatActivity {


    private Button sendVerificationCodeButton, VerifyButton;
    private EditText inputPhon_number, input_varification_code;

    private PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks;
    private String mVerificationId;
    private PhoneAuthProvider.ForceResendingToken mResendToken;
    private FirebaseAuth mAuth;

    private ProgressDialog loddingBar;


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

        mAuth = FirebaseAuth.getInstance();

        inputPhon_number = (EditText) findViewById(R.id.phone_num_input);
        input_varification_code = (EditText) findViewById(R.id.Verification_code_input);
        sendVerificationCodeButton = (Button) findViewById(R.id.sendVerification_code);
        VerifyButton = (Button) findViewById(R.id.Verify_num);

        loddingBar = new ProgressDialog(this);
        sendVerificationCodeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String phone_number = inputPhon_number.getText().toString();

                if (TextUtils.isEmpty(phone_number)) {
                    Toast.makeText(PhoneLogActivity.this, "please enter phone Number", Toast.LENGTH_SHORT).show();
                } else {
                    loddingBar.setTitle("phone Verificatiion");
                    loddingBar.setMessage("Please Wait....");
                    loddingBar.setCanceledOnTouchOutside(false);
                    loddingBar.show();

                    PhoneAuthProvider.getInstance().verifyPhoneNumber(
                            phone_number,        // Phone number to verify  
                            60,                 // Timeout duration  
                            TimeUnit.SECONDS,   // Unit of timeout  
                            PhoneLogActivity.this,               // Activity (for callback binding)  
                            callbacks);        // OnVerificationStateChangedCallbacksPhoneAuthActivity.java  
                }

            }
        });

        callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                signInWithPhoneAuthCredential(phoneAuthCredential);
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {

                loddingBar.dismiss();

                Toast.makeText(PhoneLogActivity.this, "Invalide! Please input Correct Phone number with Country code...", Toast.LENGTH_SHORT).show();

                sendVerificationCodeButton.setVisibility(View.VISIBLE);
                inputPhon_number.setVisibility(View.VISIBLE);

                input_varification_code.setVisibility(View.INVISIBLE);
                VerifyButton.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;
                loddingBar.dismiss();
                Toast.makeText(PhoneLogActivity.this, "Verification code has been sent", Toast.LENGTH_SHORT).show();

                sendVerificationCodeButton.setVisibility(View.INVISIBLE);
                inputPhon_number.setVisibility(View.INVISIBLE);

                input_varification_code.setVisibility(View.VISIBLE);
                VerifyButton.setVisibility(View.VISIBLE);
            }
        };

        VerifyButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick (View v)
            {
                sendVerificationCodeButton.setVisibility(View.INVISIBLE);
                inputPhon_number.setVisibility(View.INVISIBLE);

                String verificationcade = input_varification_code.getText().toString();


                if (TextUtils.isEmpty(verificationcade)) {

                    Toast.makeText(PhoneLogActivity.this, "please enter Verification code", Toast.LENGTH_SHORT).show();
                } else {
                    loddingBar.setTitle("Code Verificatiion");
                    loddingBar.setMessage("Please Wait....");
                    loddingBar.setCanceledOnTouchOutside(false);
                    loddingBar.show();

                    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, verificationcade);

                    signInWithPhoneAuthCredential(credential);
                }

            }
        });
    }


    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information  

                            loddingBar.dismiss();
                            Toast.makeText(PhoneLogActivity.this,"Congratulations!, You are logged in successfuly",Toast.LENGTH_SHORT).show();

                            sendUserToMainActivity();
                        }

                        else
                        {
                            String message= task.getException().toString();

                            Toast.makeText(PhoneLogActivity.this,message,Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }

    private void sendUserToMainActivity() {

        Intent mainIntent= new Intent(PhoneLogActivity.this,MainActivity.class);
        startActivity(mainIntent);
        finish();
    }

} 


0 个答案:

没有答案
相关问题