未在Firebase电话身份验证中接收代码。

时间:2017-10-06 13:53:22

标签: android firebase firebase-authentication

我正在尝试在我的应用中实施Firebase手机身份验证。 我在GitHub上引用了firebase android文档,但我无法通过短信获取代码。

我不知道为什么会这样吗?我在真实的设备上测试它。

另外,我发送短信到另一个,因为真实设备没有SIM卡。但我确信这不是问题。这样对吗?

这是我的代码

 void logIn(){

    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("verification", "onVerificationCompleted:" + credential);
            // [START_EXCLUDE silent]
            mVerificationInProgress = false;
            // [END_EXCLUDE]

            // [START_EXCLUDE silent]
            // Update the UI and attempt sign in with the phone credential
            // [END_EXCLUDE]
            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.w("verification", "onVerificationFailed", e);
            // [START_EXCLUDE silent]
            mVerificationInProgress = false;
            // [END_EXCLUDE]

            if (e instanceof FirebaseAuthInvalidCredentialsException) {

            } else if (e instanceof FirebaseTooManyRequestsException) {
                // The SMS quota for the project has been exceeded
                // [START_EXCLUDE]
                Snackbar.make(findViewById(android.R.id.content), "Quota exceeded.",
                        Snackbar.LENGTH_SHORT).show();
                // [END_EXCLUDE]
            }


        }

        @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.d("verification", "onCodeSent:" + verificationId);

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


        }
    };

    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            "+79995198722",        // Phone number to verify
            60,                 // Timeout duration
            TimeUnit.SECONDS,   // Unit of timeout
            this,               // Activity (for callback binding)
            mCallbacks);        // OnVerificationStateChangedCallbacks

    mVerificationInProgress = true;
}

private void verifyPhoneNumberWithCode(String verificationId, String code) {
    // [START verify_with_code]
    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
    // [END verify_with_code]
    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
                        Log.d("signIn", "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();

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

                        }

                    }
                }
            });
}

提前致谢!

2 个答案:

答案 0 :(得分:2)

我认为您的问题可能是 SHA-1指纹,因此您需要更新Firebase控制台中的SHA-1密钥。

<强>步骤:

登录Firebase console

  1. 点击您的项目,然后您可以看到项目概述
  2. 点击3个点,然后点击设置
  3. 点击添加指纹(底部)
  4. 粘贴SHA-1键,单击“保存”。
  5. SHA-1键的步骤:

    1. 从左侧面板中选择Android Studio中的gradle
    2. 选择您的应用
    3. 转到任务 - &gt; android - &gt; signingReport
    4. 然后你可以看到Sha-1键。

      enter image description here

答案 1 :(得分:0)

我通过在真实计算机(Android设备)上而不是模拟器上运行应用程序解决了我的问题。