不接收Fire Base OTP消息

时间:2018-11-20 19:06:29

标签: android android-studio kotlin kotlin-android-extensions

我是Android开发的新手。我没有从Fire base收到OTP消息,但是如果我手动输入代码,则它可以工作。我不确定为什么我没有收到短信。非常感谢您的帮助。我不确定我是否正确地正确执行sendVerificationcode方法。

完成的步骤:  1)我添加了GSON文件到应用程序目录  2)我在Firebase控制台中添加了测试电话号码  3)我将SHA1代码添加到火力基地  4)我在Android清单文件中添加了SMS权限。  5)我在Android Studio中启用了Firebase身份验证  6)我也尝试了不同的电话号码

VerifyPhoneActivity.java
public class VerifyPhoneActivity extends AppCompatActivity {


    private String verificationId;
    private FirebaseAuth mAuth;
    private ProgressBar progressBar;
    private EditText editText;

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

        mAuth = FirebaseAuth.getInstance();

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

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

        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) {
  // private void signInWithCredential(PhoneAuthCredential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {

                            Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                            startActivity(intent);

                        } else {
                            Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                });
    }

    private void sendVerificationCode(String number) {
        progressBar.setVisibility(View.VISIBLE);
        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) {
                editText.setText(code);
                verifyCode(code);
            }

            System.out.println("Hello Phone Number"+code);
        }

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

下面的代码似乎不起作用:

@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
    String code = phoneAuthCredential.getSmsCode();
   // String code="000000";
    if (code != null) {
        editText.setText(code);
        verifyCode(code);
    }

    System.out.println("Hello Phone Number2"+code);
}

1 个答案:

答案 0 :(得分:0)

使用以下方式:

onCreate

mAuth = FirebaseAuth.getInstance();
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks()
        {

            @Override
            public void onVerificationCompleted(PhoneAuthCredential credential)
            {
                // This callback will be invoked in two situations:
                // 1 - Instant verification. In some cases the phone number can be instantly
                //     verified without needing to send or enter a verification code.
                // 2 - Auto-retrieval. On some devices Google Play services can automatically
                //     detect the incoming verification SMS and perform verificaiton without
                //     user action.
                Log.d(TAG, "onVerificationCompleted:" + credential);

                Log.e("number","credential=-=-=>>><<>>>signInWithPhoneAuthCredential-->>");
                signInWithPhoneAuthCredential(credential);

            }
            @Override
            public void onVerificationFailed(FirebaseException e)
            {
                // This callback is invoked in an invalid request for verification is made,
                // for instance if the the phone number format is not valid.
                Log.e(TAG, "onVerificationFailed", e);

                // Show a message and update the UI
                // ...
            }



            @Override
            public void onCodeSent(String verificationId,
                                   PhoneAuthProvider.ForceResendingToken token)
            {

                // The SMS verification code has been sent to the provided phone number, we
                // now need to ask the user to enter the code and then construct a credential
                // by combining the code with a verification ID.
                Log.e(TAG, "onCodeSent:" + verificationId+"<<token>>"+token);

                // Save verification ID and resending token so we can use them later
                mVerificationId = verificationId;

                //mResendToken = token;

                // ...
            }
        };

        //String phoneNumber=Settings.PREFIX + Settings.PREFIX_PHONE;

        String phoneNumber="your phone number with prefix";

        Log.e("number","credential=-=-=>>>22222>>"+phoneNumber);

        if(phoneNumber!=null && !phoneNumber.isEmpty())
        {
            startPhoneNumberVerification(phoneNumber);
        }

方法:

private void startPhoneNumberVerification(String phoneNumber)
    {
        Log.e("startPhoneNumber","startPhoneNumberVerification------>>"+phoneNumber);
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                phoneNumber,        // Phone number to verify
                60,                 // Timeout duration
                TimeUnit.SECONDS,   // Unit of timeout
                this,               // Activity (for callback binding)
                mCallbacks);        // OnVerificationStateChangedCallbacks
        Log.e("startPhoneNumber","startPhoneNumberVerification--2222222---->>"+phoneNumber);
    }

方法:

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
                            Log.e(TAG, "signInWithCredential:success");



                        } else
                            {
                            // Sign in failed, display a message and update the UI
                            Log.e(TAG, "signInWithCredential:failure", task.getException());
                            if (task.getException() instanceof FirebaseAuthInvalidCredentialsException)
                            {

                            }
                        }
                    }
                });
    }